找不到C ++ gcc命名空间

时间:2017-04-19 20:20:20

标签: c++ gcc

我知道有许多类似的主题,但同样有许多独特的错误可能会导致这个问题(所以我认为)。因此,经过一些研究,我想问。

我的问题是编译器GNU GCC在编译一个文件时看不到我在另一个文件中声明的命名空间。 IDE(CodeBlocks)显然确实看到它,因为它自动完成命名空间的名称。我试图找出问题并提出这个问题:

文件main.cpp:

namespace MyName
{
    int MyVar;
}

#include "T1.cpp"

int main()
{
    return 0;
}

文件T1.cpp:

using namespace MyName;

错误:' MyName'不是名称空间名称。

在我的项目中,我有一个头文件,比如T1.h,以及一个实现文件T1.cpp - 并且MyName不能在其中任何一个中访问。

任何帮助或指导都将不胜感激。

1 个答案:

答案 0 :(得分:0)

正在发生的事情是CodeBlocks正在编译main.cpp和T1.cpp。当您尝试编译每个时,会发生以下情况:

main.cpp中:

$ g++ main.cpp
$

T1.cpp

$ g++ T1.cpp
T1.cpp:1:17: error: ‘MyName’ is not a namespace-name
 using namespace MyName;
                 ^
T1.cpp:1:23: error: expected namespace-name before ‘;’ token
 using namespace MyName;
                       ^
$

T1.cpp,当它自己编译时,不知道MyName。要解决此问题,请不要包含.cpp个文件,并将声明放在头文件中。

编辑:从我收集的内容来看,这可能是组织示例的更好方法:

T1.h:

namespace MyName {
    extern int MyVar;
}

T1.cpp

#include "T1.h"

int MyName::MyVar = 5;

的main.cpp

#include "T1.h"
#include <iostream>

using namespace MyName;

int main()
{
    std::cout << MyVar << std::endl;
    return 0;
}

现在它将正确编译:

$ g++ -c T1.cpp -o T1.o
$ g++ -c main.cpp -o main.o
$ g++ T1.o main.o
$ ./a.out
5