【发布时间】:2020-10-12 11:32:32
【问题描述】:
我用最新的gcc、clang和MSVC测试了下面看似奇怪的代码示例; clang 和 gcc 都给出链接错误,但 MSVC 编译和链接没有任何问题。哪一个是正确的?
// foo.h
#pragma once
namespace A
{
class foo
{
public:
foo();
void print();
};
}
// foo.cpp
#include <iostream>
#include "foo.h"
int* p = nullptr;
using namespace A;
foo::foo()
{
p = new int(5);
}
void foo::print()
{
extern int* p;
std::cout << *p;
}
#include "foo.h"
int main()
{
A::foo f;
f.print();
}
gcc 和 clang:
foo.cpp:(.text+0x35): undefined reference to 'A::p'
【问题讨论】:
标签: c++ visual-c++ namespaces language-lawyer extern