我目前正在使用命名空间来保存一组变量,这些变量应该可供项目中的所有类使用。有些变量应该是常量,并且在命名空间本身中定义,对于其他变量,应该稍后赋值。例如:
// MyProject.h
namespace MyNameSpace {
extern const double a = 1.0;
extern const int b = 2;
extern double c;
extern int d;
}
// MyProject.cpp
MyNameSpace::c = 3.0;
MyNameSpace::d = 4;
然而,这会返回变量c和d的错误:
error LNK2001: unresolved external symbol "int MyNameSpace::c"
error LNK2001: unresolved external symbol "double MyNameSpace::d"
声明后在命名空间之外为外部变量赋值的正确方法是什么?
答案 0 :(得分:1)
extern意味着变量将在其他地方定义。因此,您无法在命名空间中为外部变量赋值。您需要在某个cpp文件float MyNameSpace::c = 3.0;
中定义该变量。无论如何,这似乎没什么可走的,你不需要这里的外出。
答案 1 :(得分:0)
当使用extern
关键字时,应用于变量,它会声明变量,但不会定义它。简单地说,到目前为止,该变量没有分配内存;只有变量c
被声明并且类型为float
的定义。我最好的建议是在代码中的某处定义变量c
和d
为默认值(也就是说,如果你真的需要extern
在体系结构中你的节目)。
答案 2 :(得分:0)
你不想分配它们;你想定义它们。
error code 2
根据使用方式的不同,您可能还需要定义NSURL *videoURL =[NSURL URLWithString: @"https://youtu.be/i-QlMqZh8_g"];
FBSDKShareVideoContent *content =[[FBSDKShareVideoContent alloc]init];
content.video= [FBSDKShareVideo videoWithVideoURL:videoURL];
[FBSDKShareAPI shareWithContent:content delegate:self];
和// MyProject.cpp
double MyNameSpace::c = 3.0;
int MyNameSpace::d = 4;
。由于它们是a
,您可以从声明中删除b
以将它们定义为静态变量;或者您可以单独保留const
声明,并将没有初始化的定义添加到extern
文件中。