9

これは Qt Creator の非常に苛立たしいエラー メッセージです: ’XYZ’ does not name a type. これは通常、クラスにエラーがありXYZ、コンパイラが型を生成できないことを意味しますが、何が問題なのかについての追加のヒントはありません。

助言がありますか?

4

11 に答える 11

5

私はちょうどこの問題を抱えていて、Arckarophが言ったように: 問題は、ソース コード ファイルにヘッダー ファイルをインクルードし、その中でディレクティブ #ifndef を使用すると、それをヘッダー ファイルに再度インクルードできないことです。ソースコードファイルの変数に含まれているクラスの型を与える

例 :

class1.h には Class1 が含まれます class2.h には Class2 が含まれます class2 には、class1.h を class2 に含める場合、class1 型のプライベート変数 V があります。CPPを class2.h に含めて V に class1 型を与えることはできません。

そのため、class1.h の前に class2.cpp class2.h を挿入するか、class2.cpp から class1.h を削除します

于 2011-08-16T10:25:36.497 に答える
3

を含める前にabc.cpp必ず含めてください。xyz.habc.h

2つを交換すると違いが生じる理由はわかりませんが、私にとってはそうでした.

于 2011-02-09T18:17:18.820 に答える
2

次のような XYZ 型の何かを宣言していると思います

XYZ foo;

問題は、XYZ がまだ定義されていないことです。

以下は私の問題と私の結論です。どう思いますか?

私の問題は、クラス ABC とクラス XYZ があることです。クラス ABC には、XYZ 型として宣言されたメンバーがあります。クラス XYZ には、ABC 型として宣言されたメンバーがあります。コンパイラは、まだ定義していないため、XYZ 型が何であるかをまだ知りません。したがって、指定されたエラーは、「XYZ」はタイプに名前を付けていません。

コード例:

class ABC{
private:
    XYZ *xyz;   //XYZ is not defined yet
};

class XYZ{
private:
    ABC *abc;   //ABC is defined above
};
于 2010-11-06T03:44:46.103 に答える
1

最新のQT(3/2011)をインストールしたばかりの最近のQTプロジェクトでは、これを追加することで、ビルドを停止していた3つを修復しました...

#include <sys/types.h>

...エラーをスローしていたヘッダーファイルをインクルードする前。それはそれをしました。

おそらく他のシステムtypes.hにそのような問題があったものを配布する理由はわかりませんが、私の場合はとにかく含まれていません。それが誰かを助けることを願っています。

于 2011-03-31T05:37:43.390 に答える
1

私は自分自身のための解決策を見つけました。クラスAとクラスBがあるとします。「Ah」には「Bh」が含まれ、メンバーとしてBのインスタンスがあります。「Bh」には「Ah」が含まれ、メンバーとして A のインスタンスがあります。コンパイラは、クラス A のメンバーが宣言されているコード行の "Bh" でエラーを出します。

"A doesn't name type"

私がやっていることは、"Ah" で #include "Bh" を削除し、#include "Bh" を "A.cpp" に置きます。A クラス宣言の前に、クラス B を記述します。

...
// #include "B.h"
class B;

class A
{
... 
B m_b;
};
...

私のために働いた、頑張ってください!

于 2018-02-15T16:19:46.013 に答える
0

2 つの可能性が考えられます:
1. connect() 呼び出しで SIGNAL の代わりに SLOT を使用している可能性があります。2. QMake が実行され、.moc ファイルが生成されるように、.PRO ファイルを無償で編集する (スペースの挿入と削除など) ことが役立つ場合があります。

于 2011-02-09T19:00:38.690 に答える
0

対応するヘッダー ファイルを #include することは役に立ちますか?

于 2009-09-14T13:52:01.163 に答える
0

テンプレートを使用している場合は、コンパイラが型として認識できるように、クラス名の前に「typename」を付ける必要があります...

template <typename t> //...
于 2009-09-14T13:52:56.533 に答える