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”这一行是关于唯一“正确”的做法。不要使用其他的。 –