템플릿 클래스 Grid를 만들었습니다 (여기서 헤더 파일에서 T는 기본값이 float입니다). 소스 파일의 일부를 인용했습니다.C++ 템플릿 클래스 데이터 멤버를 사용하여 "사용 가능한 적절한 기본 생성자가 없습니다."오류가 발생했습니다
#include"Grid.h"
template <class T>
Grid<T>::Grid(unsigned int rows=1, unsigned int columns=1)
:Rows(rows),Columns(columns)
{
reset();
}
template<class T>
Grid<T>::~Grid(){}
template <class T>
void Grid<T>::reset()
{
vector<T> vec(Rows * Columns,T());
matrix = vec;
}
다른 멤버 함수는 행렬의 값을 읽거나 변경할 수 있습니다.
Grid.h : 내가 템플릿 클래스를 사용하기 위해 내가 Grid.cpp뿐만 아니라 Grid.h을, #include를하는 데 필요한 인터넷에 발견하고이 일을 내가 사용할 수 있습니다
template<typename T=float> class Grid{
public:
Grid(unsigned int, unsigned int);
~Grid();
T getValue(unsigned int, unsigned int);
void setValue(unsigned int, unsigned int, T);
void reset();
void write();
private:
unsigned int Rows;
unsigned int Columns;
vector<T> matrix;
};
clas Grid와 그 멤버 함수는 main()에 있습니다. 나는 또한 전 처리기 래퍼 arround Grid.cpp를 넣는다. 이제
, 내가 상속하지 않고, 새로운 클래스 PDEProblem을 구축하려고하지만 형 그리드에서 사용하는 회원이 내가 오류를 얻을 때 :
Error 2 error C2512: 'Grid<>' : no appropriate default constructor available c:\users\... 15
Error 3 error C2512: 'Grid<T>' : no appropriate default constructor available c:\users\... 15
4 IntelliSense: no default constructor exists for class "Grid<float>" c:\Users\... 15
PDEProblem.h :
#include"grid.h"
#include"grid.cpp"
class PDEProblem: Grid<>
{
public:
PDEProblem(unsigned int,unsigned int);
~PDEProblem();
//some more other data members
private:
Grid<char> gridFlags;
Grid<> grid;
unsigned int Rows;
unsigned int Columns;
void conPot(unsigned int, unsigned int);
void conFlag(unsigned int, unsigned int);
};
PDEProblem.cpp :
#include"grid.h"
#include"grid.cpp"
#include "PDEProblem.h"
PDEProblem::PDEProblem(unsigned int rows=1,unsigned int columns=1)
:Rows(rows), Columns(columns)
{
conPot(rows, columns);
conFlag(rows,columns);
}
PDEProblem::~PDEProblem(){}
void PDEProblem::conPot(unsigned int rows, unsigned int columns)
{
grid=Grid<>(rows,columns);
}
void PDEProblem::conFlag(unsigned int rows, unsigned int columns)
{gridFlags=Grid<char>(rows,columns);
// some stuff with a few if and for loops which sets some elements of gridFlags to 1 and the others to 0
}
어떻게 해결할 수 있습니까? 내가 관련된 모든 것에 대한 불이행이 있다고 생각합니까?
'templates '는 헤더 파일에 직접 메소드를 인라인하면 쉽게 사용할 수 있습니다. 먼저 해봐. 구현을 별도로 컴파일 된 소스 파일로 분리 할 수 있지만 명시 적 인스턴스화가 필요합니다. – jxh
@ user315052, 헤더 파일의 구현을 복사하여 붙이기 만하면됩니까? 가능하다면 대부분의 경우 두 개의 개별 파일을 사용하는 이유는 무엇입니까? – Wouter
코드가 완전히 정상입니다. [라이브 코드] (http://liveworkspace.org/code/4ewMXt$1)'.h' 또는'.cpp' 파일을 포함하는 데 문제가 있습니다. – deepmax