我有以下代碼,使用g ++ 4.4.6可以正常工作,但無法使用Visual Studio 2008進行編譯。它似乎與參數依賴查找有關,所以我認爲g ++是正確的。using指令如何影響C++中的函數參數?
// testClass.hpp
namespace test {
class foo {
public:
foo(){}
};
class usesFoo {
public:
usesFoo() {}
void memberFunc(foo &input);
};
}
// testClass.cpp
#include "testClass.hpp"
using test::usesFoo;
void usesFoo::memberFunc(foo &input) {
(void) input;
}
在Visual Studio編譯時,我得到的錯誤,
1>正在編譯...
1> testClass.cpp 1> C:\工作\ testproject \ testproject \ testclass.cpp (6):error C2065:'foo':未聲明的標識符 1> c:\ work \ testproject \ testproject \ testclass.cpp(6):error C2065:'input':未聲明的標識符 1> c:\ work \ testproject \ testproject \ testclass.cpp(6):error C2448:'test :: usesFoo :: memberFunc':函數式初始化器似乎是函數定義
我意識到將命名空間直接放在cpp文件中的成員函數上,或者「using namespace test」會解決這個問題,我更加好奇這個標準所說的是什麼。
我沒有看到任何理由期望您的代碼編譯; foo沒有在usesFoo中定義。這很有趣,它用g ++編譯。 – 2012-03-26 20:57:36
'memberFunc'不是靜態的,'foo'不合格。 *參數*依賴查找意味着*函數*的名稱在參數的名稱空間中查找,而不是相反。 – 2012-03-26 20:57:52
+1 – 2012-03-26 21:06:49