0

定義に小さな問題があります。整数変数に割り当てたいのですが、コンパイラはそれが宣言されていないと言います。

コードは次のようになります。

#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;
}
}

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

define を使用するのは悪い習慣であることはわかっていますが、既存のプロジェクトを拡張するだけで、その設計方法にとどまるようにしています。

編集: エラー メッセージは次のFehler 1 error C2065: 'MYDEFINE': nichtdeklarierter Bezeichner ...とおりです。

EDIT2: #warning のヒントをありがとう。異なるフォルダに同じ名前のファイルが 2 つありました。コンパイラがこれを表示しなかった理由がわかりません。とにかく、それは今動作します。

4

5 に答える 5

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;
    }

これはエラーなしでコンパイルされるため、#includes に何か問題があります。

于 2009-04-07T14:33:32.487 に答える
2

シンボル MYDEFINE が本当に定義されているかどうかを確認する必要があります。

宣言されているヘッダー ファイルが実際にインクルード (およびコンパイル) されているかどうかを確認します。定義の近くで #warning を使用して、myclass.cxx 用にコンパイルされていることを確認します。

#ifndef DEFINES_H
#define DEFINES_H

#define MYDEFINE 2
#warning My define is defined

#endif

コンパイルされていない場合 (コンパイル ログに警告メッセージが見つからない場合)、DEFINES_H を検索します。すでに別の場所で定義されている可能性があります。

于 2009-04-07T14:31:25.657 に答える
1

おそらく、クラスを宣言していないことに不平を言っているのでしょう。#include "myclass.h" を試してください

編集:

ああ、「;」がありません クラス宣言の後。

于 2009-04-07T14:35:17.847 に答える
0

他のヘッダー ファイルも DEFINES_H を使用していますか?

#pragma once の 1 つの引数...

于 2009-04-07T14:27:44.293 に答える
0

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

于 2009-04-07T14:38:52.987 に答える