我不是一個C++專家,仍然沒有很好的直觀的方式來掌握事物的工作方式。我認爲這是一個簡單的問題。我無法將對象與狀態傳遞給其他對象。我寧願避免傳遞指針或引用,因爲一旦初始化對象被設置,我就會在緊密的循環中調用它們數百萬次。我認爲我的東西就像命令模式一樣。這是問題的核心。我的頭的代碼是一樣的東西:簡單的問題:傳遞狀態的對象,C++
class ObjectWithState {
public:
ObjectWithState(int state) { // This constructor creates the problem!
state_ = state; // everyting works with no constructor.
}
private:
int state_;
};
class TakesObject {
public:
TakesObject(ObjectWithState obj) {
obj_ = obj;
}
private:
ObjectWithState obj_;
};
我main()
功能看起來像:
int main() {
ObjectWithState some_object(1);
TakesObject takes_object(some_object);
return 0
}
我得到以下錯誤(G ++):
test.h: In constructor 'TakesObject::TakesObject(ObjectWithState)':
test.h:14: error: no matching function for call to 'ObjectWithState::ObjectWithState()'
test.h:5: note: candidates are: ObjectWithState::ObjectWithState(int)
test.h:3: note: ObjectWithState::ObjectWithState(const ObjectWithState&)
簡單的答案?
我不確定這是否與複製構造函數有關。如果是這樣,我試圖找到一個解決方案,使ObjectWithState的類定義非常乾淨和簡短。這個庫的用戶將定義很多像TakesObject函數將使用的小函數。理想情況下,ObjectsWithState的程序員只需要關注實現一個簡單的對象。也許我誤入歧途......
很好的答案,但他不需要聲明一個拷貝構造函數。默認的拷貝構造函數是足夠的。 – rlbond 2009-06-06 02:54:26
他確實需要聲明覆制構造函數 - 一旦他聲明瞭ObjectWithState(int),默認的複製構造函數就會丟失。 – 2009-06-06 02:56:39