템플릿 및 정적 멤버를 사용하여 몇 가지 아이디어를 구현하고 있습니다. "진짜"코드가 다른 오류가 발생하지만, 이것은 내가 여전히 장난감 예 링커 오류와 code템플릿 및 정적 객체
#include <string>
#include <iostream>
template<int dim>
class Class1 {
public:
Class1() {};
~Class1() {};
void foo() {
std::cout<<"foo-1"<<std::endl;
}
protected:
std::string name;
};
template<int dim>
class Class2 : public Class1<dim>
{
public:
Class2(const int & a, const int &b) :
number(Class2<dim>::id_generator++)
{
Class1<dim>::name = "My-name";
foo(); // (1)
};
void foo() {
Class1<dim>::foo();
std::cout<<"foo-2"<<std::endl;
}
private:
const unsigned int number;
static unsigned int id_generator;
};
int main()
{
int a = 1, b=2;
Class2<2> class2(a,b); // (2)
}
에있는 하나입니다
undefined reference to `Class2<2>::id_generator'
것이란 삶의 예는이 오류를 발생
(1) required from 'Class2<dim>::Class2(int, int) [with int dim = 3]'
(2) required from here.
실생활의 오류는 전혀 전혀 알려주지 않습니다! : 만약 장난감 문제가 풀리면 현실 세계도 사라질 것입니다. 그러나 구조의 문맥에서 "실생활"오류 (그 두 줄)에 대한 아이디어가 있다면, PLS 알려
가능한 중복 [C++ : 정적 클래스 멤버에 정의되지 않은 참조 (http://stackoverflow.com/questions/272900/ 그러나 템플릿 코드는 이런 식으로 쓰기 때문에, 헤더에없는 소스 파일을 간다 c-undefined-static-class-member-reference) – Mat
당신에게 전혀 알려주지 않는 것은 무엇을 의미합니까? 정의되지 않은 참조가 있음을 알려주고 참조가 필요한 장소를 알려줍니다. 그게 당신이 필요로하는 모든 것입니다! –
@LightnessRacesinOrbit @LightnessRacesinOrbit 실제 코드에 실제로 머무르는 두 번째 오류는 있지만 코드는 – Denis