C++ 字符数组编译错误

C++ 字符数组编译错误,c++,C++,我的代码中有什么问题?它不编译 class FileNames { public: static char* dir; static char name[100]; static void Init3D() { FileNames::dir = "C://3D//"; FileNames::name = "abc";

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

   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文件名::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");

另外,不要忘了
#包括
和以后
删除[](FileNames::dir)

下次,请发布您遇到的编译错误。您的意思一定是FileNames::name失败,而不是FileNames::dir。dir不是ArrayTanks,修复了这个问题并进行了澄清。1)嗯。。。不,他没有?2) 他不是在初始化,他是在运行时给它们赋值,这应该没问题。问题是,正如在另一个答案中指出的,在C/C++中不能使用赋值运算符复制数组。@Lundin,1)在他问题的原始版本中(是static char*name),这引出了2)的原因。事实上,一定是在前五分钟或是什么时候。将strcpy复制到dir指向的随机地址是一个非常糟糕的主意。@Lundin-同意!哎哟。。。谁会那样做!:P