C++ 尝试定义私有变量时无法编译.cpp文件

C++ 尝试定义私有变量时无法编译.cpp文件,c++,g++,private,C++,G++,Private,我试图编译一个.cpp文件,其中包含一个.h文件,然后实现概述的类 在String.h中: using namespace std; class String { private: int _length; char *data; int getCharArraySize(char arr[]); 在String.cpp中: #include "String.h" u

我试图编译一个.cpp文件,其中包含一个.h文件,然后实现概述的类

在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;

我只对字符串有问题::\u长度。我最初认为这是因为_length是私有的,但是所有其他私有方法/变量都可以编译。我还需要保留这个.h文件,这样我就不能公开它了。任何帮助都将不胜感激

正如编译器所说:
\u length
不是静态成员变量。然而,通过提供它自己的定义,您将它视为一个整体。不要那样做只能这样定义静态成员变量。

数据也是如此

顺便说一下,如果必须定义
char*
变量,那么这是错误的:

char String::*data;
这是对的:

char* String::data;

尽管有词汇语法产生的奇怪之处(从C继承),但
*
是类型的一部分,而不是名称。

您不需要:
int String:\u length用于非静态成员变量。发布代码时,请不要包含行号(这会使复制代码以供自己尝试变得困难)。相反,使用注释来标记错误所在的行。那么,我应该只在构造函数中定义它吗?此外,已适当注意到。我会编辑这个问题。你用哪本书来学习C++?