2016-12-30 51 views
1

我已經在類中定義了一個靜態結構。但它產生的誤差爲錯誤如何初始化和使用靜態結構

error LNK1120: 1 unresolved externals

我的頭文件

class CornerCapturer{ 
    static struct configValues 
    { 
     int block; 
     int k_size; 
     int thre; 
     double k; 
     configValues() :block(2), k_size(3), thre(200), k(0.04){} 
    }configuration; 
public: 
    void captureCorners(Mat frame); 
} 

我的cpp文件

void CornerCapturer::captureCorners(Mat frame){ 

    int y= CornerCapturer::configuration.thre; 
} 

請幫我

+0

非常感謝。 –

回答

3

這種添加到您的CPP文件;到實例化靜態結構:

CornerCapturer::configValues CornerCapturer::configuration; 

不要忘記你的類的封閉};

+1

非常感謝你幫助我,我錯過了它。 –

0

靜態成員變量需要公開。你目前擁有它的方式隱式地使結構變得私人。我運行了一些測試,並且ASH說的是正確的,你必須在全局範圍內實例化結構,但是你不能用私有成員來完成。就個人而言,我得到的範圍錯誤:

'configuration' is a private member of 'Someclass'

只有在我使結構公開後:它沒有錯誤編譯。

#include <iostream> 

class Someclass 
{ 
public:  
    static struct info 
    { 
     int a; 
     int b; 
     int c; 
     info() : a(0), b(0), c(0){} 

    } configuration; 

    void captureCorners(int frame); 
}; 

struct Someclass::info Someclass::configuration; 

void Someclass::captureCorners(int frame) 
{ 
    configuration.c = frame; 
} 

int main() 
{ 
    Someclass firstclass; 
    Someclass secondclass; 

    Someclass::configuration.a = 10; 
    firstclass.configuration.b = 8; 
    secondclass.configuration.c = 3; 

    using namespace std; 


    cout << "First Class a = " << firstclass.configuration.a << "\n"; 
    cout << "First Class b = " << firstclass.configuration.b << "\n"; 
    cout << "First Class c = " << firstclass.configuration.c << "\n"; 

    cout << "Second Class a = " << secondclass.configuration.a << "\n"; 
    cout << "Second Class b = " << secondclass.configuration.b << "\n"; 
    cout << "Second Class c = " << secondclass.configuration.c << "\n"; 

    cout << "Everyclass a = " << Someclass::configuration.a << "\n"; 
    cout << "Everyclass b = " << Someclass::configuration.b << "\n"; 
    cout << "Everyclass c = " << Someclass::configuration.c << "\n"; 

}