클래스 템플릿에서 개체의 멤버 함수를 호출하려고하는데 다음 코드를 컴파일 할 수 없습니다. 내가 object.template method<T>();
을 사용할 수 있다고 말한 게시물 here을 찾았습니다.템플릿 멤버 함수 호출
MSVC 2015을 사용하여, 나는 오류 C2059를 얻을 : 구문 오류 : '템플릿'
#include <iostream>
class Bar
{
public:
Bar() : m_x(0.f) { }
~Bar() { }
void setX(double x) { m_x = x; }
void printX(void) { std::cout << m_x << std::endl; }
private:
double m_x;
};
template <class T>
class Foo
{
public:
Foo() { }
~Foo() { }
void setBar(T bar) { m_bar = bar; }
void printBar(void) { m_bar.template printX<T>(); } // This is the issue
private:
T m_bar;
};
int main()
{
Bar bar;
bar.setX(20.f);
bar.printX();
Foo<Bar> foobar;
foobar.setBar(bar);
foobar.printBar();
return 0;
}
작성된 바와 같이 Bar에는 템플릿 기반 멤버 함수가없는 것 같습니다. –
당신이 제공하는 링크는 호출되는 멤버 함수가 템플릿 멤버 함수 일 때만 관련이 있습니다. 사실,'printX'는 템플릿 멤버 함수가 아니거나 클래스 템플릿의 멤버도 아닙니다 ('Bar'는 템플릿 클래스가 아닙니다). 요컨대, 그 링크는 당신이 실제로 가지고있는 문제와 관련이 없습니다. – WhozCraig