2016-11-28 23 views
0

我是C++的新手,並試圖解決這個問題。當我編譯時,我得到錯誤a nonstatic member reference must be relative to a specific object。編寫代碼的正確方法是什麼?這是我所在的地方numShapes給我的錯誤。找不到這個非靜態成員引用錯誤

class Application 
private: 
    int numShapes; 
public: 
    Shapes * shapes[numShapes]; 

然後,如果這是正確的術語,我將其作爲我的虛擬基類的另一個頭部。

class Shapes 
{ 
    virtual void draw(char letter); 
    virtual ~Shapes() {} 
}; 

回答

1

代碼Shapes * shapes[numShapes];正在請求編譯器保留numShapes的空間量。問題是它在編譯時沒有已知的值。因此,要麼使numshapes不變,要麼查看動態內存分配。

+0

我嘗試使用此 形狀將其改爲動態數組*形狀=新形狀[numShapes]; 但現在它給出的錯誤:抽象類「形狀」的數組是不允許的:函數「形狀::繪製」是一個純虛函數 – brisk172

+0

不知道你的意思。最主要的是在編譯時應該知道nuShapes的值。或者不要使用數組而是使用std :: containers之一。即G。 std :: vector – MotKohn

+0

@ brisk172動態數組錯誤是因爲你沒有定義draw()。 – jmstoker

0

而不是

Shapes * shapes[numShapes]; 

我建議使用:

std::vector<Shapes*> shapes; 

刪除numShapes完全因爲你可以從shapes得到大小。

在構造函數中初始化shapes。應該遵循以下幾點。

Application::Application(std::size_t numShapes) : shapes(numShapes, nullptr) {} 
+0

這工作,但現在它給出另一種類型的錯誤,在一個不同的.cpp文件中,我有shape = new Shapes * [numShapes];它給出了錯誤,沒有操作符「=」匹配這些操作數。什麼是正確的操作數? – brisk172

+0

@ brisk172,那個問題告訴我,你應該對'std :: vector'有一個基本的瞭解。如果你不明白如何使用'std :: vector',請忽略我的建議。 –

相關問題