我收到错误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
。
答案 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)。