char数组编译错误
char array compilation error
我的代码中有什么问题?它不编译。。
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)
相关文章:
- 用MacOS Mojave编译C++:致命错误:mpi.h:没有这样的文件或目录
- std::is_base_of表示ctor编译错误
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- Qt5:使用QCommandLineParser类时出现奇怪的编译错误
- Qt Cmake 错误编译"GuiSupportQt not found"
- Opengl 精度转换错误编译错误 E0415
- 库将ARM架构错误编译为架构X64
- RT 音频 Mac 错误 g++ 编译错误
- 错误编译Boost.log
- 错误编译QT创建者 / QT窗口小部件示例
- 错误编译MIPS32
- Visual Studio 2013 中的错误(编译和运行代码)
- 链接错误编译qt项目在visual 2010
- 无法用模板错误编译nsgmls
- 奇怪的错误.编译失败
- 如果有人调用c++中的方法,则强制错误(编译时)
- 来自autoconf测试的错误编译命令
- 时间限制超出错误C++编译
- SFML 2.3 和 CodeBlocks 错误编译