char数组编译错误

时间:2011-06-28 12:52:48

标签: c++

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

   class FileNames
   {
        public:
           static char* dir;
           static char name[100];

           static void Init3D()
           {
            FileNames::dir = "C://3D//";
            FileNames::name = "abc";
           }
   };   

5 个答案:

答案 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)