2016-12-30 48 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"; 

}