尝试定义私有变量时无法编译 .cpp 文件
Cannot Compile .cpp File When Trying To Define Private Var
我正在尝试编译一个包含 .h 文件的 .cpp 文件,然后执行概述的 class。
在String.h中:
using namespace std;
class String
{
private:
int _length;
char *data;
int getCharArraySize(char arr[]);
在String.cpp中:
#include "String.h"
using namespace std;
/*
* Private vars and methods
*/
int String::_length;
char String::*data;
int String::getCharArraySize(char arr[])
{
//method body
return 0;
}
当我尝试使用 g++ 编译时出现此错误:
% g++ String.cpp -c
String.cpp:14:17: error: ‘int String::_length’ is not a static data member of ‘class String’
int String::_length;
我只有 String::_length 有问题。我最初认为这是由于 _length 是私有的,但所有其他私有 methods/vars,编译得很好。我还需要按原样保留此 .h 文件,这样我就不能只创建它 public。如有任何帮助,我们将不胜感激!
嗯,正如编译器所说:_length
不是静态成员变量。然而,您通过为其提供自己的定义来将其视为一个整体。不要那样做。 只有static成员变量应该这样定义。
data
也是如此。
顺便说一下,如果您确实需要定义一个 char*
变量,那么这是错误的:
char String::*data;
这是对的:
char* String::data;
尽管词法语法产生异常(继承自 C),*
是 类型 的一部分,而不是名称。
我正在尝试编译一个包含 .h 文件的 .cpp 文件,然后执行概述的 class。
在String.h中:
using namespace std;
class String
{
private:
int _length;
char *data;
int getCharArraySize(char arr[]);
在String.cpp中:
#include "String.h"
using namespace std;
/*
* Private vars and methods
*/
int String::_length;
char String::*data;
int String::getCharArraySize(char arr[])
{
//method body
return 0;
}
当我尝试使用 g++ 编译时出现此错误:
% g++ String.cpp -c
String.cpp:14:17: error: ‘int String::_length’ is not a static data member of ‘class String’
int String::_length;
我只有 String::_length 有问题。我最初认为这是由于 _length 是私有的,但所有其他私有 methods/vars,编译得很好。我还需要按原样保留此 .h 文件,这样我就不能只创建它 public。如有任何帮助,我们将不胜感激!
嗯,正如编译器所说:_length
不是静态成员变量。然而,您通过为其提供自己的定义来将其视为一个整体。不要那样做。 只有static成员变量应该这样定义。
data
也是如此。
顺便说一下,如果您确实需要定义一个 char*
变量,那么这是错误的:
char String::*data;
这是对的:
char* String::data;
尽管词法语法产生异常(继承自 C),*
是 类型 的一部分,而不是名称。