【问题标题】:Cannot Compile .cpp File When Trying To Define Private Var尝试定义私有 Var 时无法编译 .cpp 文件
【发布时间】:2016-10-08 19:35:34
【问题描述】:

我正在尝试编译一个包含 .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 文件,所以我不能只公开它。任何帮助将不胜感激!

【问题讨论】:

  • 你不需要那个:int String::_length; 用于非静态成员变量。
  • 发布代码时,请不要包含行号(复制代码自己尝试会很困难)。而是使用例如cmets 标记出错误的行。
  • 那么我应该在构造函数中简单地定义它吗?此外,适当指出。我将编辑问题。
  • 你在用哪本书来学习 C++?

标签: c++ g++ private


【解决方案1】:

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

data 也是如此。

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

char String::*data;

这是对的:

char* String::data;

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

【讨论】:

    猜你喜欢
    • 2014-06-07
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多