考慮這個非常簡單的代碼: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++最令人煩惱的解析。 –
@眠りネロクno,gcc編譯它 –
@RichardHodges所以MSVC,它只是一個警告。眠りネロク是正確的。 – Quentin