char数组编译错误

char array compilation error

本文关键字:错误 编译 数组 char      更新时间:2023-10-16

我的代码中有什么问题?它不编译。。

   class FileNames
   {
        public:
           static char* dir;
           static char name[100];
           static void Init3D()
           {
            FileNames::dir = "C://3D//";
            FileNames::name = "abc";
           }
   };   

不能分配给数组,因此FileNames::name = "abc"失败(但是char arr[4] = "abc"可以工作,因为这是直接初始化,而不是分配)。这里也可以使用char*,或者使用strcpy将数据复制到阵列,或者最好使用std::string,这样可以避免原始字符串的许多缺点。

最重要的是,您需要在全局范围的某个地方,在函数之外定义静态成员:char FileNames::name[100];。此时,即使使用数组,也可以使用=的初始化语法,但要分配的字符串需要与数组具有相同的长度。

您的代码有两个问题:

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...

尝试这样初始化:

class FileNames
{
    public:
       static char* dir;
       static char name[];
};   
char *FileNames::dir = "C://3D//";
char FileNames::name[100] = "abc";

您记得在类之外定义静态成员吗?此外,我认为您不需要解析范围,除非您实际上在类之外。

使用:

FileNames::dir = new char[strlen("C://3D//")];
strcpy(FileNames::dir, "C://3D//");
strcpy(FileNames::name, "abc");

此外,不要忘记#include <cstring>和稍后的delete[](FileNames::dir)