当试图定义私有变量时,无法编译.cpp文件

Cannot Compile .cpp File When Trying To Define Private Var

本文关键字:编译 文件 cpp 变量 定义      更新时间:2023-10-16

我正在尝试编译一个包含。h文件的。cpp文件,然后实现概述的类。

在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是私有的,但所有其他私有方法/变量,编译得很好。我还需要保留这个。h文件,这样我就不能让它公开。任何帮助将不胜感激!

嗯,正如编译器所说:_length不是静态成员变量。然而,您通过为其提供自己的定义来将其视为一个。千万不要那样做。只有static成员变量应该这样定义

同样适用于data

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

,这是正确的:

char* String::data;

词法语法产生的奇怪现象(继承自C)尽管如此,*类型的一部分,而不是名称。