使用静态const char * const而不是#define

时间:2011-09-30 04:26:18

标签: c++

我收到错误error: ‘Name’ was not declared in this scope 我在这里想念的是什么

源文件:

#include<iostream>
#include "scr.h"
using namespace std;

const char* const Test::Name;  

void Test::Print()
{
    cout<<Name;
}

int main()
{       
    Test *t = new Test();
    t->Print();
    delete t;   
}

标题文件:

class Test
{   
    static const char* const Name = "Product Name";
    public:
        void Print();
};

编辑:

如果我将char* const替换为int,则可行。为什么呢?

static const int Name = 4; //in header

const int Test::Name;  //In source

代码的目的是为有效C ++中提到的#define替代。在那里的示例中,使用了static const int

4 个答案:

答案 0 :(得分:3)

您无法在类中初始化静态成员变量。甚至不在头文件中。

标题文件:

class Test
{   
    static const char* const Name;
    public:
        void Print();
};

在你的cpp文件中:

const char* const Test::Name = "Product Name";

编辑: 我必须补充一点,初始化只允许用于int和枚举,并且也允许使用可在编译时计算的常量。

答案 1 :(得分:2)

在课程定义中,您不能initialize成员。

看一下Parashift帖子 - Can I add = initializer; to the declaration of a class-scope static const data member?

  

摘要:需要注意的是,您只能使用integral或。{   enumeration类型,初始化表达式必须是   可以在编译时计算的表达式:它必须只包含   其他常量,可能与内置运算符结合使用。

答案 2 :(得分:1)

通常,您无法直接在类定义中初始化静态变量,您必须在单独的源文件中执行此操作,如下所示:

const char* const Test::Name =  "Product Name";

异常是整数常量,允许在类定义中。一个简单的解决方法是使用静态成员函数:

struct Test {
  static const char *Name() { return "Product Name"; }
};

答案 3 :(得分:0)

将字符串的赋值移动到源/实现文件(.cpp)。