Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在c+;中的标题中使用名称空间时,对错误的未定义引用+;_C++_Namespaces - Fatal编程技术网

C++ 在c+;中的标题中使用名称空间时,对错误的未定义引用+;

C++ 在c+;中的标题中使用名称空间时,对错误的未定义引用+;,c++,namespaces,C++,Namespaces,我在说“未定义引用…”时遇到了一大堆错误,我不明白为什么。我读过其他错误为“未定义引用…”的问题,但答案对我来说不起作用。以下是我的部分代码: 主要内容: #包括 #包括 #包括 #包括 使用名称空间std; 使用arma; int main(){ cout您只是忘记定义std::string inputfileName。例如,您可以在dobsmain.cpp中执行此操作: #include <DombsMain.h> #include <BallJoint.h> #in

我在说“未定义引用…”时遇到了一大堆错误,我不明白为什么。我读过其他错误为“未定义引用…”的问题,但答案对我来说不起作用。以下是我的部分代码:
主要内容:

#包括
#包括
#包括
#包括
使用名称空间std;
使用arma;
int main(){

cout您只是忘记定义std::string inputfileName。例如,您可以在dobsmain.cpp中执行此操作:

#include <DombsMain.h>
#include <BallJoint.h>
#include <dombs.h>
#indlude blabla

using namespace std;
using namespace arma;

namespace dombsmain{

void initilize(string infileName){

    inputfileName = infileName;
    ..blabla
namespace dombsmain{

void initilize(string infileName){

    inputfileName = infileName;
    }
std::string inputfileName = "";
}

这些是链接器错误,而不是编译器错误。您的代码(可能)很好,您只需要学习如何使用工具。特别是要让链接器知道您正在使用犰狳。您是否定义了“extern std::string inputfileName;”某个地方?@user2950911说实话,我真的不知道extern关键字是干什么的。我查了一下,似乎我应该在
DombsMain.cpp
中重新定义inputfileName。所以我在
DombsMain.cpp
中添加了
std::string inputfileName;
。这样正确吗?我可以用rem删除extern关键字吗打开“外部”,包含此标头的每个翻译单元(.cpp文件)都将实例化其自己的“inputfileName”。这可能适合您的情况,也可能不适合您的情况。通过声明extern,您可以告诉您的链接器相信您,此变量是在某个地方定义的,但不是在您声明extern的地方定义的。您可以在dombsmain.cpp中定义它,例如在БöССГаааааааааааint dombsmain.cpp?我已经在头文件中定义了它?我可以删除extern关键字吗?因为“extern”修饰符意味着变量的内存分配到其他地方,例如在*.cpp文件中,所以您需要“两次”定义它-一次有extern,另一次没有它。@lijas头中的东西是一个声明(“某处有一个名为‘inputfileName’的字符串)。您还需要一个定义(“此特定字符串应命名为‘inputfileName’”)谢谢,至少我不再收到这个错误了。我能以某种方式跳过extern关键字,让它继续工作吗?如果我删除extern关键字,我会收到一个错误,上面写着
dombsmain::inputfileName的多个定义
。我不喜欢我必须有声明/定义tdombsmain命名空间中的变量和函数位于两个位置。@lijas如果您跳过inputfileName变量命名空间中的extern关键字,它将成为一个简单的全局变量,它将在代码中定义两次(在包含“dombsmain.h”的位置)。因此链接器会给您一个错误“inputfileName变量的多个定义”“。要解决此问题,需要将inputfileName定义为extern或static。
#include <DombsMain.h>
#include <BallJoint.h>
#include <dombs.h>
#indlude blabla

using namespace std;
using namespace arma;

namespace dombsmain{

void initilize(string infileName){

    inputfileName = infileName;
    ..blabla
namespace dombsmain{

void initilize(string infileName){

    inputfileName = infileName;
    }
std::string inputfileName = "";
}