gpt4 book ai didi

c++ - 在 C++ 中对在不同文件中声明和定义的两个类使用相同的命名空间

转载 作者:行者123 更新时间:2023-11-27 22:56:17 24 4
gpt4 key购买 nike

我正在尝试在文件 nstest1.hnstest2.h 中声明两个类 C1C2它们分别在文件 nstest1.cppnstest2.cpp 中定义。这两个类都在同一个命名空间下定义。

以下是文件:

//nstest1.h
namespace Mine{
class C1{
public:
void callme();
};
}

//nstest2.h
namespace Mine {
class C2 {
public:
void callme();
};
}

//nstest1.cpp
#include<iostream>
#include "nstest1.h"

using namespace std;
using namespace Mine;

void Mine::C1::callme(){
std::cout << "Please call me " << std::endl;
}

//nstest2.cpp
#include<iostream>
#include "nstest2.h"

using namespace std;
using namespace Mine;

void Mine::C2::callme(){
std::cout << "Please call me too" << std::endl ;
}

以下文件尝试使用命名空间 Mine 使用此类。

//nstest.cpp
#include<iostream>
#include "nstest1.h"
#include "nstest2.h"

using namespace std;
using namespace Mine;

int main(){
Mine::C1 c1;
Mine::C2 c2;
c1.callme();
c2.callme();
return 0;
}

当我使用命令“g++ nstest.cpp”进行编译时,出现以下错误:

/tmp/cc2y4zc6.o: In function `main':
nstest.cpp:(.text+0x10): undefined reference to `Mine::C1::callme()'
nstest.cpp:(.text+0x1c): undefined reference to `Mine::C2::callme()'
collect2: error: ld returned 1 exit status

如果将定义移动到声明文件(nstest1.h 和 nstest2.h),它可以正常工作。不确定这里发生了什么。我错过了什么吗?提前致谢:)。

最佳答案

构建程序时需要包含其他 .cpp 文件。

选项 1:编译所有文件并在一个命令中构建可执行文件

g++ nstest.cpp nstest1.cpp nstest2.cpp -o nstest

选项 2:分别编译每个文件,然后再构建可执行文件

g++ -c nstext1.cpp
g++ -c nstest2.cpp
g++ -c nstest.cpp
g++ nstest.o nstest1.o nstext2.o -o nstest

关于c++ - 在 C++ 中对在不同文件中声明和定义的两个类使用相同的命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32748419/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com