我的代码有什么问题?它不编译..
class FileNames
{
public:
static char* dir;
static char name[100];
static void Init3D()
{
FileNames::dir = "C://3D//";
FileNames::name = "abc";
}
};
答案 0 :(得分:5)
您无法分配给数组,因此FileNames::name = "abc"
失败(char arr[4] = "abc"
无效,因为这是直接初始化,而不是分配)。也可以在这里使用char*
,或使用strcpy
将数据复制到数组或更好地std::string
,这样可以避免原始字符串的许多缺点。
最重要的是,您需要在函数外部的全局范围内定义静态成员:
char FileNames::name[100];
。此时,即使使用数组,也可以使用=
初始化语法,但要分配的字符串需要与数组具有相同的长度。
答案 1 :(得分:1)
您的代码存在两个问题:
1)您复制了变量name
(有两种不同的类型)
2)你不能初始化那样的静态成员(参见下面的例子)。
最后一件事不是问题,但你应该考虑使用std::string
,因为它封装了字符串功能,因此你不需要处理原始指针。它不那么痛苦,特别是如果你是这种新事物的话。
将其更改为:
// Header file
class FileNames
{
private:
static char* name;
public:
static char* dir;
};
CPP file
#include "FileNames.h"
char* FileNames::name = "abc";
char* FileNames::dir = "C://3D//";
// Now use your class...
答案 2 :(得分:0)
尝试初始化如下:
class FileNames
{
public:
static char* dir;
static char name[];
};
char *FileNames::dir = "C://3D//";
char FileNames::name[100] = "abc";
答案 3 :(得分:0)
你还记得在课堂外实际定义静态成员吗?另外,我不认为你需要解决范围,除非你实际上在课外。
答案 4 :(得分:-1)
使用:
FileNames::dir = new char[strlen("C://3D//")];
strcpy(FileNames::dir, "C://3D//");
strcpy(FileNames::name, "abc");
此外,请不要忘记#include <cstring>
和之后的delete[](FileNames::dir)