2011-07-16 11 views
7

メンバー変数 'objectCount'の修飾エラーが発生しました。また、コンパイラは、 'ISO C++では非const staticメンバのインラインクラス初期化を禁じます。 これはメインクラスです:非定数静的メンバー変数のC++初期化?

#include <iostream> 
#include "Tree.h" 
using namespace std; 

int main() 
{ 
    Tree oak; 
    Tree elm; 
    Tree pine; 

    cout << "**********\noak: " << oak.getObjectCount()<< endl; 
    cout << "**********\nelm: " << elm.getObjectCount()<< endl; 
    cout << "**********\npine: " << pine.getObjectCount()<< endl; 
} 

これは非const静的objectCountを含むツリークラスです:あなたはこのヘッダを含むソースファイル内の静的変数を定義する必要が

#ifndef TREE_H_INCLUDED 
#define TREE_H_INCLUDED 

class Tree 
{ 
    private: 
     static int objectCount; 
    public: 
     Tree() 
     { 
      objectCount++; 
     } 
     int getObjectCount() const 
     { 
      return objectCount; 
     } 
    int Tree::objectCount = 0; 
} 
#endif // TREE_H_INCLUDED 
+0

で推奨的回答のいずれかに記載されていなかった別の代替はありあなたが** ** **一つのヘッダー**にすべてを保つことを可能にするこの執筆の時。 [this SO answer](http://stackoverflow.com/a/33618854/3041008)の例を見てください。これはあなたの例に完全に対応しています。 – mucaho

答えて

14

#include "Tree.h" 

int Tree::objectCount = 0; // This definition should not be in the header file. 
          // Definition resides in another source file. 
          // In this case it is main.cpp 
+0

objectCountの宣言に2つ以上のデータ型が残っています – kifcaliph

+0

この行を 'Tree :: objectCount = 0;'にするのを忘れてしまい、セミコロンでヘッダークラ​​スを終了するのを忘れました あなた – kifcaliph

+0

なぜこの変数はクラスの外で宣言する必要がありますか?プライベート変数を定義して初期化しようとしていますが、これと同じエラーが発生しています。どのように私はクラスの外でこれを行うのですか? – dangerChihuahua007

3

ヘッダーではなく、単一のC++ファイルでスコープ外に定義する必要があります。

int Tree::objectCount = 0; 
int main() 
{ 
    Tree oak; 
    Tree elm; 
    Tree pine; 

    cout << "**********\noak: " << oak.getObjectCount()<< endl; 
    cout << "**********\nelm: " << elm.getObjectCount()<< endl; 
    cout << "**********\npine: " << pine.getObjectCount()<< endl; 
} 

#ifndef TREE_H_INCLUDED 
#define TREE_H_INCLUDED 

class Tree 
{ 
    private: 
     static int objectCount; 
    public: 
     Tree() 
     { 
      objectCount++; 
     } 
     int getObjectCount() const 
     { 
      return objectCount; 
     } 
} 
#endif // TREE_H_INCLUDED 
4
int Tree::objectCount = 0; 

以下に示すように、上記の行は、クラス外、及び.cppファイルでなければならない:

//Tree.cpp 
#include "Tree.h" 

int Tree::objectCount = 0; 
関連する問題