0

次のクラス ヘッダーを使用して、Visual Studio で 2 セットのエラーが発生しています...

編集:申し訳ありませんが、実際にウィンドウが含まれていることを示すのを忘れていました。

#include "Window.h"

class Spark
{
    public:

        Window& getWindow();    // #1
        Window *win;            // #2
 };

#1には次の問題があります。

error C2143: syntax error : missing ';' before '&'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

#2は非常に似た話があります...

error C2143: syntax error : missing ';' before '*'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

私は C++ を初めて使用するので、失敗した可能性があります。#1 でやりたいことは、Window オブジェクトへの参照を返すことです。#2 では、このオブジェクトの作成後にウィンドウ オブジェクトに設定されるポインターを作成しようとしています (したがって、ポインター)。

これをしばらく調べて見つめた後、これらの2行に問題は見られません。VSが戻り値の型にハングアップしているように見え、本質的にそれを取得していません。しかし、私の知る限りでは、これらの宣言を正しく作成しました。

助けてくれてありがとう。

4

2 に答える 2

2

通常、この種のエラーは、Window使用しようとした時点で in scope の宣言がないために表示されます。

これはさまざまな問題によって引き起こされる可能性があり、そのうちの 1 つが欠落している可能性があります#include

次のコードをコンパイルすることで、この効果を確認できます ( を使用g++)。

//typedef int xyzzy;
int main(void) {
    xyzzy plugh;
    return 0;
}

出力は次のとおりです (最後の行に注意してください)。

prog.cpp: In function 'int main()':
prog.cpp:3: error: 'xyzzy' was not declared in this scope
prog.cpp:3: error: expected `;' before 'plugh'

ただし、その最初の行のコメントを外すと、正常にコンパイルされます。

Window使用しようとするポイントの前に宣言する必要があります。

あなたが示しているように、 を定義していると思わWindowれる場合は、それを確認する必要があります。アクティブでない内に宣言がある#ifdefか、ファイルをループに含めて、正しい宣言順序またはその他の多くのことを妨げている可能性があります。

于 2013-02-14T05:57:01.943 に答える
2

種類Windowが分からないようです。が宣言されているヘッダーファイルをインクルードWindowし、正しい名前空間を使用していること、または完全修飾型名を使用していることを確認してください。

更新: 循環依存の場合、何らかの方法で依存関係を削除するか、前方宣言を使用してそのような状況を回避できます。class Window;Spark の宣言の前に次の行を配置するだけです。

class Window;

class Spark {
    Window *test;
}
于 2013-02-14T05:57:06.673 に答える