2012-05-09 9 views
2

残念ですが、これが何度も繰り返し尋ねられましたが、ただちにを受け取らないとこのCコードに何が問題なのですか?いつか「C2009:イニシャライザは定数ではありません "このヘッダーの9行目と10行目ではイニシャライザは一定のエラーではありません

// CONIO2.H 
#ifndef CONIO2_H_INCLUDED 
#define CONIO2_H_INCLUDED 
#ifndef _WINDOWS_ 
#include <windows.h> 
#endif 

void clrscr(void) { 
    int Written = 0; 
    COORD ord; 
    ord.X = 0; 
    ord.Y = 0; 
    FillConsoleOutputCharacter(GetStdHandle(STD_OUTPUT_HANDLE), 32, 80 * 25, ord, &Written); 
} 

//MAIN.C 
#include <stdio.h> 
#include <conio2.h> 

編集:エラーが見つかりました。 Cアプリケーションの開発にEclipse CDTプラグインを使用していましたが、パスを正しく設定していませんでした。私はそれを動作させるためにconfigsと遊ぶ必要があったが、とにかく感謝!

+0

conio2.hはコンパイラライブラリではなく、 '#include" conio2.h "'を使用するなど、ユーザが作成したヘッダファイルです。ただし、これはエラーの原因ではありません。 – Lundin

+0

'/ P'で前処理して、結果の.iファイルの中の関数を見ても手掛かりがありますか? –

答えて

0

このリンクは、いくつかの例とともにエラーを説明しています。それはあなたを助けるかもしれません。リンクごとに、コンパイラはプログラムの開始時に非自動変数を初期化し、初期化される値は一定でなければなりません。 http://msdn.microsoft.com/en-us/library/t801az8a(v=vs.80).aspx

+0

リンクは参照と帰属を提供するのに適していますが、それ自体が貧弱な解答になるようにします。答えがそれ自身で立つことができるように関連資料も引用してください。 – luke

+0

int Written = 0; //それは定数ではありません!つまり、isnt * zero *一定の値! –

+0

IMHO、このリンクはまったく同じエラー、なぜこのエラーがスローされたのか、問題を示すいくつかの例です。それは自明です。私はリンクに無関係なものは何も見ません。 –

1
COORD ord; 

あなたはCOORDタイプの別名の定義が欠落しています。 http://msdn.microsoft.com/en-us/library/windows/desktop/ms682119(v=vs.85).aspx

EDITCOORDタイプの別名を使用するWincon.h

は、(ヘッダが含まれる)の要件についてはこちらを参照してください:私の推測では、あなたが正しいヘッダを含めていないです。また、あなたが持っているようです#ifndefディレクティブに問題があります。#ifndefが2つありますが、ヘッダーには#endifが1つのみです。 #ifndefごとに#endifが必要です。 _WINDOWS_が定義されていない場合にのみ、windows.hを含めることは確実ですか?

+0

ヘッダー:Wincon.h(Windows.hを含む) ファイルの先頭にそれを含めます。 –

+0

編集:純粋で純粋な方法でifndefとwindows.hも含めて削除しても、私はまだ同じエラーが発生します –

+0

を含むガードは不要ですので、削除してください。 Windows.hには独自のヘッダーガードが必要です。 – Lundin

0

コードにはいくつかのプリプロセッサの奇妙さがあります。以下のコードは、標準 Windows用Cコンパイラでうまくいきます。 VC++は標準のCコンパイラではないので、あらゆる種類の奇妙なエラーが発生する可能性があります。

// CONIO2.H 
#ifndef CONIO2_H_INCLUDED 
#define CONIO2_H_INCLUDED 

#include <windows.h> 

void clrscr (void) 
{ 
    DWORD Written = 0; 
    COORD ord; 
    ord.X = 0; 
    ord.Y = 0; 
    FillConsoleOutputCharacter (GetStdHandle(STD_OUTPUT_HANDLE), 
           32, 
           80 * 25, 
           ord, 
           &Written); 
} 

#endif /* CONIO2_H_INCLUDED */ 

//MAIN.C 

#include <stdio.h> 
#include "conio2.h" 
+0

ああ、申し訳ありませんが、奇妙ではありません。ガードはwindows.hがインクルードされていることを確認することでした。なぜなら、私はいくつかのファイルにインクルードしていたが、他のファイルにはインクルードしていなかったからです。また、conio2.h **はコンパイラのインクルードパスにありますので、私は実際にを使用します:) –

関連する問題