2016-02-26 88 views
-2

我有兩個類中的第一個包含了結構, 這是什麼啊使用結構從一個類構造另一個類

class A 
{ 
public: 
A(); 
struct structname 
{double a;....}; 
}; 

,我想用這個結構作爲構造函數的參數乙

#include "A.h" 
B::B(A::structname data) 
{ 
} 

,但我得到的錯誤信息: 「structname」在「A級」沒有指定類型

是什麼問題?

details:兩個類在不同的.cpp文件中。 在A.cpp和B.cpp:我只是#包含了A.H和B.h 在B.h:

class A; 
class B 
{ 
public: 
B(A::structname data); 
} 

實際結構:

struct structname 
{ 
std::vector<double> a={0,0,0}; 
std::vector<double> B={0,0,0}; 
std::vector<double> c={0,0,0}; 
std::vector<double> d={0,0,0}; 
} 
+0

我希望'....'不在實際的程序中。 –

+0

這完全有可能,請參閱http://ideone.com/aveqY9錯誤必須在其他地方。也許你弄亂了你的包容? – Anedar

+0

@ColinBasnett可能是CHOCOLEO正在試驗可變結構。 – user4581301

回答

1
class A 
{ 
    public: 
    A(); 
     struct structname 
     { 
      std::vector<double> a={0,0,0}; 
      std::vector<double> B={0,0,0}; 
      std::vector<double> c={0,0,0}; 
      std::vector<double> d={0,0,0}; 
     }; 
}; 
class B 
{ 
    public: 
    B(A::structname data); 
}; 

只需格式化你的代碼。你會看到你所有的錯誤。

+0

是的,我也是這麼做的。仍然無法運行 – CHOCOLEO

+0

總是合成你的代碼。這是非常有幫助的,並從愚蠢的錯誤中拯救你。如果您使用C++ 11並且頭文件很好,那麼一定不會有錯誤。 –

0

顯然你在B.h中聲明瞭A(這就是我從你的代碼片段中讀到的)。如果你正在向前聲明A,那麼編譯器只知道有一個名爲A的類是類的類型。它不知道A::structname那裏。

做你的轉發宣告其他方式或只是避免嵌套類型。

相關問題