0
我基本上有以下兩類,我使用按值返回函數來創建對象。 在下面的Bar類中,我有兩個Foo類成員對象。我怎麼能正確初始化,這兩個對象中的每一個都是分開的? 下面,我正在給出一個關於顯示的編譯器錯誤的示例。基於按值返回函數正確初始化對象
template < typename T >
class Foo{
public:
Foo();
Foo(const Foo<T> &);
~Foo();
friend Foo<T> createFoo1(double, bool);
friend Foo<T> createFoo2(double, bool);
friend Foo<T> createFoo3(int);
private:
std::vector<T> m_data;
};
template < typename T >
Foo<T> createFoo1(double param1, bool param2){
Foo<T> myFoo;
// fill myFoo.
return (myFoo);
}
template < typename T >
class Bar{
public:
Bar();
Bar(const Foo<T> &, const Foo<T> &);
Bar(const Bar<T> &);
~Bar();
friend Bar<T> createBar1(double, bool);
private:
Foo<T> m_fooY;
Foo<T> m_fooX;
};
template < typename T >
Bar<T> createBar1(double param1, bool param2){
Bar<T> myBar(createFoo1<T>(param1, param2), createFoo1<T>(param1, param2)); //OK
return (myBar);
//Bar<T> myBar;
//myBar.m_fooY(createFoo1<T>(param1, param2)); // <- error C2064: term does not evaluate to a function taking 1 arguments
//myBar.m_fooX(createFoo1<T>(param1, param2)); // <- error C2064: term does not evaluate to a function taking 1 arguments
//return (myBar);
}
的'// OK'線是罰款,爲什麼還需要另一種解決方案? –
@KerrekSB,我想明白什麼是錯誤的,因爲這是我的第一次嘗試。 – Tin
好的,但「OK」這一行是關於唯一「正確」的做法。不要使用其他的。 –