2013-03-12 70 views
0

我有一個類的數組,姑且稱之爲A,我想再拍B類將保持n個A的實例C++類持有其他類

乙頭文件:

class A; 
class B 
{ 
    B(); 
    A * arrayofA; 
} 

B.cpp

#include "B.h" 
#include "A.h" 
B::B() { 
arrayofA = new A[n]; 
} 

視覺工作室強調=運算符,並告訴我: 錯誤:類型的值 「B :: A *」 不能被分配給類型的實體 「A *」

怎麼了?

+7

這聽起來像你有兩個類具有相同的名稱,一個是全局,一個在B類內部。如果編譯您的示例以確保它創建您想要說明的相同錯誤,它將有所幫助。 – 2013-03-12 22:48:44

+4

另外,使用'std :: vector'。 – 2013-03-12 22:49:04

+0

我假設你忘記在類聲明後複製';',但這是一個完整的例子,它編譯和演示問題的權利? ;) – 2013-03-12 22:50:49

回答

2

基於編譯器錯誤,這聽起來像你不小心把B.

範圍內的預申報

編譯器似乎認爲你這樣做:

class B 
{ 
    class A; //It's seeing 'A' inside of 'B'. 

    A *arrayOfA; 
}; 

這是一個看均爲B :: A:: A。至於爲什麼,沒有足夠的代碼知道。檢查你的名字空間和你的類,仔細檢查A在哪裏被預先聲明,以及A在哪裏被實際定義。檢查它們是否在相同的範圍內。

你可以使用一個向量來達到同樣的目的。

#include "A.h" 

class B 
{ 
    std::vector<A> array; 
} 

或者,如果你一定沒有列入啊,然後你可以預先申報,並定義數組:

std::vector< std::unique_ptr<A> > array; 
+1

但是,他/她說錯誤位於B :: B(構造函數)內,其中一個不合格的A將與B :: A相同。 – user1610015 2013-03-12 23:02:37

+0

我認爲這個類在全局範圍內,但是預聲明在B中,所以B :: A預聲明優先於::一個真實類聲明。無論如何,這是我的猜測。需要更多的代碼才能看到問題所在。 – 2013-03-12 23:36:48