2016-10-08 11 views
-1

.hファイルを含む.cppファイルをコンパイルしようとしていて、そのアウトラインのクラスを実装しています。 string.hの中プライベートバールを定義しようとすると.cppファイルをコンパイルできない

:String.cppで

using namespace std; 

class String 
{ 
     private: 

       int _length; 
       char *data; 
       int getCharArraySize(char arr[]); 

% g++ String.cpp -c 
String.cpp:14:17: error: ‘int String::_length’ is not a static data member of ‘class String’ 
int String::_length; 

私は午前:

#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; 
     } 

私はグラムでコンパイルしようと++私はこのエラーを取得しますString :: _ lengthに問題があります。私は当初、_lengthがプライベートであるが、他のすべてのプライベートメソッド/バールが原因であると考えていました。私はまた、この.hファイルをそのまま残す必要があるので、公開することはできません。どんな助けもありがとう!

+0

静的でないメンバー変数の場合、 'int String :: _ length;'は必要ありません。 –

+0

コードを投稿する際には、行番号を含めないでください(コードをコピーして自分自身を試してみるのは難しくなります)。代わりに、たとえばエラーが発生した行をマークするコメント。 –

+0

それでは、単にコンストラクタ内で定義するだけですか?また、正式に言及した。私は質問を編集します。 –

答えて

1

まあ、それはコンパイラとまったく同じです:_lengthは静的メンバー変数ではありません。しかし、あなたはそれを独自の定義で提供することでそれを扱っています。単にそれをしないでください。 スタティックメンバー変数は、そのように定義する必要があります。

dataと同じです。ところで

、あなたがこれまでchar*変数を定義しなければならないのならば、これは間違っている:

char String::*data; 

と、これは右である:から継承

char* String::data; 

字句文法生産奇妙( C)にもかかわらず、*タイプの一部であり、名前ではありません。

関連する問題