我必须在整个项目中使用我的变量。我刚刚在名称空间中定义了两个字符串变量,并在main.cpp中引用此标头。
在这里app.h和app.cpp:
app.h
#include <string>
#include <iostream>
using namespace std;
namespace App
{
extern string FingerPrint;
extern string FingerPrintID;
}
app.cpp
#include "App.h"
using namespace std;
string FingerPrint = "";
string FingerPrintID = "";
,我正在尝试在main.cpp中使用此变量:
main.cpp
#include "App.h"
#include "Helper.h"
using namespace std;
int main()
{
App::FingerPrint = Helper().GetFingerPrint();
App::FingerPrintID = Helper().GetFingerPrintID();
cout<<"FingerPrintID: "<<App::FingerPrintID<<endl;
cout<<"FingerPrint: "<<App::FingerPrint<<endl;
return 0;
}
编译此代码时,我会收到此错误:
cmakefiles/hardwareservice.dir/main.cpp.o:在函数
main': /home/debian/Development/clion-workspace/app/main.cpp:19: undefined reference to
app ::指纹' /home/debian/development/clion-workspace/app/main.cpp:20:未定义 引用App::FingerPrintID' /home/debian/Development/clion-workspace/app/main.cpp:23: undefined reference to
App :: fingerprintid' /home/debian/development/clion-workspace/app/main.cpp:24:undefined 引用`app ::指纹'
但是,如果我不使用名称空间,并且使用此变量而没有" app ::",则可以使用。这样:
app.h
#include <string>
#include <iostream>
using namespace std;
extern string FingerPrint;
extern string FingerPrintID;
app.cpp
#include "App.h"
using namespace std;
string FingerPrint = "";
string FingerPrintID = "";
main.cpp
#include "App.h"
#include "Helper.h"
using namespace std;
int main()
{
FingerPrint = Helper().GetFingerPrint();
FingerPrintID = Helper().GetFingerPrintID();
cout<<"FingerPrintID: "<<FingerPrintID<<endl;
cout<<"FingerPrint: "<<FingerPrint<<endl;
return 0;
}
没有这样的问题。
我可以使用名称空间的全局变量吗?如果可以,我该如何使用?
您没有说您想要在app.cpp
中的应用程序空间中的变量#include "App.h"
using namespace std;
string App::FingerPrint = "";
string App::FingerPrintID = "";
应该做工作
现在,您只需在某个地方声明,名称空间App
中有两个字符串。您实际上从来没有定义这些变量。
他们不会仅仅通过与名称相同的名称中的文件中的文件中来进入名称空间。(App.cpp
与namespace App
没有关系,仅是 justmind )。
因此,您要么需要将App::
预先置于字符串声明中,要么将它们包装在.cpp
文件中的某个地方的namespace App { ... }
中。
说:全球变量是邪恶的。尝试在App
或Config
或Model
实例中定义它们。在设置过程中,创建和初始化实例,然后将其作为(构造函数)参数传递。