2013-02-22 65 views
0

我想創建一個從許多其他類中收集信息並且結束仿真的類。爲此,它必須獨立於所有其他類並且完全可訪問。爲此我選擇了靜態方法,確實是一個靜態結構。靜態struct成員獲取「未定義的引用」。不知道爲什麼

這是我的了foo.h

class Foo 
{ 
public: 
    static int app_counter; 

    typedef struct 
    { 
     double eed; 
     int bits; 
    }APPLayer; 

    static APPLayer applayer_metric; 
public: 
    Foo(){}; 
    ~Foo(); 
}; 

這是Foo.cpp中

#include "Foo.h" 
int Foo::app_counter=0; 
//How do I set all internal members to zero? 
Foo::APPLayer applayer_metric; 
Foo::~Foo() 
{ 
    std::cout << app_counter << std::endl; 
    //Which is the way to access to the values of my members? 
    std::cout << applayer_metric.bits << std::endl; 
} 

這是我在Foo.cpp中

Foo.cc得到錯誤:38:未定義參考'Foo :: applayer_metric'

例如如果我改線Foo.cpp中這一個

的std ::法院< <富:: applayer_metric.bits < <的std :: ENDL;

我得到完全相同的錯誤。

我的問題是:

  1. 我如何初始化靜態結構變量的所有成員爲零?
  2. 如何在Foo.cpp的其他函數中訪問這些成員?

僅供參考,沒有抱怨,如果我初始化和訪問變量「app_counter」

我在做什麼錯?

在此先感謝。

+0

[C++未定義參照靜態構件]的可能重複(http://stackoverflow.com/questions/9110487/c-undefined-reference-to-to-static-member) – PlasmaHH 2013-02-22 10:24:21

+1

你在'int Foo :: app_counter = 0; e'中有一個尾隨的'e' – 2013-02-22 10:24:44

+0

[有什麼意思對一個靜態成員有一個未定義的引用?](http://stackoverflow.com/questions/7092765 /它是什麼意思 - 有一個未定義的參考 - 一個靜態成員) – Mankarse 2013-02-22 10:27:58

回答

3

您定義的Foo::applayer_metric缺少範圍解析運算符。它更改爲這樣:

Foo::APPLayer Foo::applayer_metric; 
+0

@HEA:[適用於我](http://liveworkspace.org/code/2OgGfu$1)。 – Mankarse 2013-02-22 10:51:00

+0

對於最後一條評論感到抱歉。這是一個錯字。我認爲這是測試的最後選擇!現在我可以在構造函數初始化結構,非常感謝。我正在閱讀你的文章,如果我能找到它,我就不會在這裏發佈這個問題。 :) – Humberto 2013-02-22 11:04:15

相關問題