В основном у меня есть следующие два класса, для которых я использую функции возврата по значению для создания объектов.
В приведенном ниже классе 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);
}