2009-04-07 7 views
0

定義に小さな問題があります。私はそれを整数変数に代入したいが、コンパイラはそれが宣言されていないと言っている。ここでC2065定義をintに代入している間に宣言されていない識別子

は、コードは次のようになります。int型の割り当てと defines.hラインで

#ifndef DEFINES_H 
#define DEFINES_H 

#define MYDEFINE 2 

#endif 

myclass.h

namespace mynamespace { 
class myClass { 
    int someFunction(); 
}; 
} 

myclass.cxx

#include "defines.h" 
#include "myclass.h" 
namespace mynamespace { 
int myClass::someFunction() { 
    int var = MYDEFINE; 
    return 0; 
} 
} 

コンパイラエラーが発生します。また、同じヘッダーファイルで定義されている別の定義を、同じ効果を持つ関数パラメーターとして使用しようとしました。何か案は?前もって感謝します。

定義を使用することは悪い習慣ですが、私は既存のプロジェクトのみを拡張し、その設計方法にとどまります。

編集:このエラーメッセージは単純に:Fehler 1 error C2065: 'MYDEFINE': nichtdeklarierter Bezeichner ...これは実際のソースコードではありませんが、私は質問をま​​とめる際に非常に慎重だったと思います。

EDIT2:#ワーニングのヒントありがとうございます。異なるフォルダに同じ名前のファイルが2つありました。私はコンパイラがなぜこれを引き起こさなかったのか分かりません。とにかく、今は動作します。

+0

正確なエラーメッセージを含めてください。悪魔が詳細に表示されることがあります。 – unwind

答えて

2

あなたは、シンボルMYDEFINEが実際に定義されているかどうか確認する必要があります。

が宣言されているヘッダーファイルが実際には (コンパイル済み)かどうかを確認してください。 、

#ifndef DEFINES_H 
#define DEFINES_H 

#define MYDEFINE 2 
#warning My define is defined 

#endif 

それがコンパイルされていない場合(コンパイルログに警告メッセージを見つけられませんよ)DEFINES_Hの検索を行います。それはmyclass.cxx用にコンパイルされていることを確認するために定義近く#warning使用してください。既に別の場所で定義されている可能性があります。

0

他のヘッダーファイルでもDEFINES_Hを使用していますか?一度に#pragmaため

つの引数...

+0

プロジェクト内の2つの "defines.h"ヘッダーで問題が発生するので、違いはありません。 – MSalters

+0

マイクロソフトが特定したものではなく、標準ではなく、その#pragmaを追加します。 –

+0

#pragma onceはMSだけではありません。 gccもそれを実装しています。すべてのプリプロセッサでは認識されませんが、本当に多様な環境にいる場合は使用できません。 – danio

2

のは、すべて一緒にそれを置くましょう:

#ifndef DEFINES_H 
    #define DEFINES_H 
    #define MYDEFINE 2 
    #endif 

    namespace mynamespace { 
    class myClass { 
     int someFunction(); 
    }; // note ; missing in your code 
    } 

    namespace mynamespace { 
    int myClass::someFunction() { 
     int var = MYDEFINE; 
     return 0; 
    } 

これは、エラーなしでコンパイルので、あなたの#includeで間違って何かがあります。

+0

+1いいですね。ほとんどの構文エラーはコンパイラに多くの悲しみを与え、これは古典的なものです。 –

+0

ヒントのおかげで、私は忘れてしまった; #myclass.hを#includeすることもできます。 – DaClown

1

あなたのクラスを宣言していないと不平を言っている可能性があります。 "myclass.h"

編集#including試してみてください。

ああ、行方不明に ';'あなたのクラス宣言の後に。

+0

heh heh、ohまあ。私は例文コードではあまりリテラルではないはずです。 – veefu

+0

+1それを指摘する – DaClown

0

プリプロセッサがあなたのコードに対して行っていることを確認する必要があります。myclass.cxxを-Pフラグでコンパイルし、生成された.iファイルを調べてみてください。

関連する問題