2015-01-08 49 views
-2

我不知道,为什么我的代码不起作用。我创建struct和里面放超载运营operator T***(),在主,我想用下面的符号const int * const * const * p1 = a;重载运算符T ***()

struct A{ 
    template<class T> operator T***(){} 
}; 

int main(){ 
    A a; 
    const int * const * const * p1 = a; 
    return 0; 
} 

Error: undefined reference to '_ZN1AcvPPPT_IKiEEv'

+6

我不知道你为什么期望工作。 – sjdowling

+0

@sjdowling:告诉他为什么。 –

+2

在我看到的所有奇怪的代码中,这使我最喜欢WTF。恭喜:)虽然,但是,你想在这里实现什么? – jrok

回答

3

您只需错过了给你的类型转换函数的实现

struct A{ 
    template<class T> operator T***() { 
     return nullptr; // Do whatever you want to do here. 
    } 
}; 

看到一个working sample请。

+0

该死的链const :) – Ankur

+0

@Shan正如你可以从链接的示例看到的,'const'在这里不起任何作用。 –

2

我完全不知道你正在尝试做的,但你的问题是一个连接问题。您只需声明(但不定义)转换运算符T***。你必须定义它,

template<class T> operator T***() 
{ 
    // define it here 
} 
0

在你编辑的问题:

template<class T> operator T***(); 

声明运营模板,但没有定义它,因此,它是不确定的错误。即使您在另一个源文件中定义模板,也会得到该错误,因为必须在每个使用它们的翻译单元中定义模板。

编辑后:

template<class T> operator T***(){} 

代码编译,但未定义行为,因为运营商缺少return语句。