C++ 创建一个字符数组,其大小由参数-C++;
我有一个带有静态字符数组的类。 数组的大小在C++ 创建一个字符数组,其大小由参数-C++;,c++,static-array,C++,Static Array,我有一个带有静态字符数组的类。 数组的大小在argv中给出 我想做这样的事情: class ABC { public: static char *buffer; ABC(int size) { ABC::buffer = new char[size]; } } // in other file: ABC tempVar(atoi(argv[1])); 但这似乎不起作用。我会遇到如下错误: 错误2错误LNK2001:未解析的外部符号“public:静态字符 *ABC:
argv
中给出
我想做这样的事情:
class ABC {
public:
static char *buffer;
ABC(int size) {
ABC::buffer = new char[size];
}
}
// in other file:
ABC tempVar(atoi(argv[1]));
但这似乎不起作用。我会遇到如下错误:
错误2错误LNK2001:未解析的外部符号“public:静态字符
*ABC::缓冲区“(?)?buffer@ABC@@2PADA)gpslib.lib
如何修复此问题?您需要准确地定义一次
静态缓冲区,它只声明了一次。将以下内容添加到一个.cpp
文件中:
char* ABC::buffer;
请注意,每次创建ABC
实例时,先前分配的缓冲区将丢失(内存泄漏),这不是您想要的
更健壮的解决方案将缓冲区作为实例(非静态)成员。一个更健壮的解决方案将使用std::string
而不是char*
,并为您管理动态内存分配。您需要准确定义静态缓冲区一次,它只声明过一次。将以下内容添加到一个.cpp
文件中:
char* ABC::buffer;
请注意,每次创建ABC
实例时,先前分配的缓冲区将丢失(内存泄漏),这不是您想要的
更健壮的解决方案将缓冲区作为实例(非静态)成员。一个更健壮的解决方案是使用std::string
而不是char*
,并为您管理动态内存分配。您不想这样做。童车,有什么用?我看不出有什么意义。另外,避免使用atoi
。使用std::stoi
(由C++11引入)。@Nawaz-有什么区别?@kakush:区别在于std::stoi
会让您知道参数是否无效(或有超长),而std::atoi
会保持沉默。@VladLazarenko-我在其他地方使用这个缓冲区-这就是它是静态的原因。我只有这个类的一个实例,所以不应该有任何bug。你不想做这样的事情。童车,有什么用?我看不出有什么意义。另外,避免使用atoi
。使用std::stoi
(由C++11引入)。@Nawaz-有什么区别?@kakush:区别在于std::stoi
会让您知道参数是否无效(或有超长),而std::atoi
会保持沉默。@VladLazarenko-我在其他地方使用这个缓冲区-这就是它是静态的原因。我只有这个类的一个实例,所以不应该有任何bug。