は、この非常に簡単なコードを考えてみましょう:C++の関数定義と変数宣言の不一致?
#include <memory>
class Foo
{
public:
Foo() {};
};
class Bar
{
public:
Bar(const std::shared_ptr<Foo>& foo) {}
};
int main()
{
Foo* foo = new Foo;
Bar bar(std::shared_ptr<Foo>(foo));
return 0;
}
Visual Studioが
warning C4930: 'Bar bar(std::shared_ptr<Foo>)': prototyped function not called (was a variable definition intended?)
を報告して...どのようにこの行が関数定義として解釈されBar bar(std::shared_ptr<Foo>(foo));
できる作成した何bar
オブジェクトが存在しないのはなぜ?
私はDo the parentheses after the type name make a difference with new?をチェックしてもC++: warning: C4930: prototyped function not called (was a variable definition intended?)が、私は、構文Foo()
もBar()
を使用していないように私の問題がここに異なっている感じ。
編集:それは正常にコンパイルされることに注意してください。
Foo* foo = new Foo;
std::shared_ptr<Foo> fooPtr(foo);
Bar bar(fooPtr);
C++の最も厄介な解析。 –
@眠りネロクいいえ、gccはそれをコンパイルします –
@RichardHodges MSVCもそうですが、それは唯一の警告です。眠りネロクが正しいです。 – Quentin