4

私はこれらの2つのクラスを持っています:

class Foo
{
public:
      Foo() { std::cout << "in Foo constructor" << std::endl; }
};
class Bar
{
public:
    Bar() {};
    Bar(Foo foo);
private:
    Foo m_foo;
};

Bar::Bar(Foo foo) :
    m_foo(foo)
{
    std::cout << "in Bar constructor with argument Foo" << std::endl;
}

int main() {
    Bar bar(Foo()); // is something wrong here ?
    return 0;
}

コンパイルして実行しましたが、画面には何も出力されBar bar(Foo())ませんでした。型名の後の括弧は new と違いがありますか? で類似性を見てきました。 そして Foo f = Foo(); // 'Foo::Foo(Foo)' の呼び出しに一致する関数はありませんが、まだわかりません。

4

2 に答える 2

0

OK、コンパイラは関数を宣言していると考えていることが指摘されています。PubbyおよびNbr44による。これは、それを回避する方法です。変数を宣言していることをコンパイラに知らせるだけです。

int main() {
    Bar bar = Foo();
    return 0;
}
于 2013-04-05T04:26:00.547 に答える