【发布时间】:2011-03-16 13:01:44
【问题描述】:
在将代码从 Visual Studio 移植到 gcc 时,我发现了一个奇怪的问题。以下代码在 Visual Studio 中编译良好,但在 gcc 中导致错误。
namespace Baz
{
template <class T>
class Foo
{
public:
void Bar()
{
Baz::Print();
}
};
void Print() { std::cout << "Hello, world!" << std::endl; }
}
int main()
{
Baz::Foo<int> foo;
foo.Bar();
return 0;
}
我的理解是这应该可以编译,因为在模板实例化之前(在定义 Print() 之后)不应该编译该类。但是,gcc 报告以下内容:
t.cpp:在成员函数 'void Baz::Foo::Bar()' 中: 第 8 行:错误:'Print' 不是 'Baz' 的成员
谁是对的?如果 gcc 是正确的,为什么?
【问题讨论】:
-
这是完整的代码吗?我认为您在类声明后缺少分号
-
抱歉,打错了。那里有分号是正确的。
-
我在测试编译器更新时遇到了类似的情况:stackoverflow.com/questions/1615660/…
标签: c++ visual-studio gcc