我有一個類的數組,姑且稱之爲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 *」
怎麼了?
我有一個類的數組,姑且稱之爲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 *」
怎麼了?
基於編譯器錯誤,這聽起來像你不小心把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;
但是,他/她說錯誤位於B :: B(構造函數)內,其中一個不合格的A將與B :: A相同。 – user1610015 2013-03-12 23:02:37
我認爲這個類在全局範圍內,但是預聲明在B中,所以B :: A預聲明優先於::一個真實類聲明。無論如何,這是我的猜測。需要更多的代碼才能看到問題所在。 – 2013-03-12 23:36:48
這聽起來像你有兩個類具有相同的名稱,一個是全局,一個在B類內部。如果編譯您的示例以確保它創建您想要說明的相同錯誤,它將有所幫助。 – 2013-03-12 22:48:44
另外,使用'std :: vector'。 – 2013-03-12 22:49:04
我假設你忘記在類聲明後複製';',但這是一個完整的例子,它編譯和演示問題的權利? ;) – 2013-03-12 22:50:49