尝试定义私有变量时无法编译 .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),* 类型 的一部分,而不是名称。