我有以下代码,使用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