在命名空间

时间:2015-05-13 13:42:39

标签: c++ namespaces

我目前正在使用命名空间来保存一组变量,这些变量应该可供项目中的所有类使用。有些变量应该是常量,并且在命名空间本身中定义,对于其他变量,应该稍后赋值。例如:

// 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"

声明后在命名空间之外为外部变量赋值的正确方法是什么?

3 个答案:

答案 0 :(得分:1)

extern意味着变量将在其他地方定义。因此,您无法在命名空间中为外部变量赋值。您需要在某个cpp文件float MyNameSpace::c = 3.0;中定义该变量。无论如何,这似乎没什么可走的,你不需要这里的外出。

答案 1 :(得分:0)

当使用extern关键字时,应用于变量,它会声明变量,但不会定义它。简单地说,到目前为止,该变量没有分配内存;只有变量c被声明并且类型为float的定义。我最好的建议是在代码中的某处定义变量cd为默认值(也就是说,如果你真的需要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文件中。