これは Qt Creator の非常に苛立たしいエラー メッセージです: ’XYZ’ does not name a type
. これは通常、クラスにエラーがありXYZ
、コンパイラが型を生成できないことを意味しますが、何が問題なのかについての追加のヒントはありません。
助言がありますか?
これは Qt Creator の非常に苛立たしいエラー メッセージです: ’XYZ’ does not name a type
. これは通常、クラスにエラーがありXYZ
、コンパイラが型を生成できないことを意味しますが、何が問題なのかについての追加のヒントはありません。
助言がありますか?
私はちょうどこの問題を抱えていて、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 を削除します
を含める前にabc.cpp
必ず含めてください。xyz.h
abc.h
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
};
最新のQT(3/2011)をインストールしたばかりの最近のQTプロジェクトでは、これを追加することで、ビルドを停止していた3つを修復しました...
#include <sys/types.h>
...エラーをスローしていたヘッダーファイルをインクルードする前。それはそれをしました。
おそらく他のシステムtypes.hにそのような問題があったものを配布する理由はわかりませんが、私の場合はとにかく含まれていません。それが誰かを助けることを願っています。
私は自分自身のための解決策を見つけました。クラス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;
};
...
私のために働いた、頑張ってください!
2 つの可能性が考えられます:
1. connect() 呼び出しで SIGNAL の代わりに SLOT を使用している可能性があります。2. QMake が実行され、.moc ファイルが生成されるように、.PRO ファイルを無償で編集する (スペースの挿入と削除など) ことが役立つ場合があります。
対応するヘッダー ファイルを #include することは役に立ちますか?
テンプレートを使用している場合は、コンパイラが型として認識できるように、クラス名の前に「typename」を付ける必要があります...
template <typename t> //...