gpt4 book ai didi

c++ "no appropriate default constructor available"错误使用模板类数据成员

转载 作者:行者123 更新时间:2023-11-28 07:40:01 25 4
gpt4 key购买 nike

我做了一个模板类Grid(我在头文件中说T的默认值是float),我引用了源文件的一部分:

#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;
}

其他成员函数可以读取/更改矩阵的值或对其进行计算。

网格.h:

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;
};

我在互联网上发现,为了使用模板类,我需要 #include Grid.cpp 和 Grid.h,这样做我可以在我的 main() 中使用 clas Grid 及其成员函数。我还在 Grid.cpp 周围放置了一个预处理器包装器。

现在,当我尝试构建一个新类 PDEProblem 时,没有继承但使用 Grid 类型的成员,我得到错误:

    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

PDE问题.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);
};

PDE问题.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
}

我该如何解决这个问题?在我看来,我对所有相关内容都有默认设置?谢谢

最佳答案

使用我的编译器 (Visual Studio 2010) 和您的代码,我可以通过将默认参数值从函数定义移至函数原型(prototype)来消除您的错误。具体来说:

网格.h

template<typename T=float> class Grid{

public:
Grid(unsigned int rows = 1, unsigned int columns = 1);
...
};

网格.cpp

template <class T>
Grid<T>::Grid(unsigned int rows, unsigned int columns)
:Rows(rows),Columns(columns)
{
reset();
}

关于c++ "no appropriate default constructor available"错误使用模板类数据成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16021953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com