Ошибки:
1>D:\Projects\Engine\Titan\Titan\Source.cpp(17,69): error C2760: синтаксическая ошибка: непредвиденный токен ";"; требуется "{" 1>D:\Projects\Engine\Titan\Titan\Source.cpp(26): message : выполняется компиляция ссылки на экземпляр класс шаблон функции "plane_metric::plane" 1>D:\Projects\Engine\Titan\Titan\Source.cpp(20,49): error C2760: синтаксическая ошибка: непредвиденный токен ";"; требуется "{" 1>D:\Projects\Engine\Titan\Titan\Source.cpp(17,1): fatal error C1903: не удается восстановить после предыдущих ошибок; остановка компиляции
#include < iostream>
namespace plane_metric
{
template<typename Field>
class plane
{
private:
Field** field = nullptr; // Field Buffer
int str = 0; // Strings Count
int coll = 0; // Collums Count
void clear(Field def); // Filling field buffer default value
public:
/* Constructors */
plane(const int str, const int coll);
plane(const int str, const int coll, Field def) : plane(str, coll);
plane(Field** field);
plane(Field** field, Field def) : plane(field);
/* Main Funclional */
void fill(Field ch);
};
}
int main() {
//std::cout << "Hello, world !" << std::endl;
plane_metric::plane<char> obj(10, 10, '?');
std::cout << std::endl;
return 0;
}
template<typename Field>
void plane_metric::plane<Field>::clear(Field def)
{
for (size_t i = 0; i < this->str; i++) {
for (size_t j = 0; j < this->coll; j++) {
this->field[i][j] = def;
}
}
}
template<typename Field>
plane_metric::plane<Field>::plane(const int str, const int coll)
{
this->str = str;
this->coll = coll;
this->field = new Field * [this->str];
for (size_t i = 0; i < this->str; i++) {
field[i] = new Field[this->coll];
}
}
template<typename Field>
plane_metric::plane<Field>::plane(const int str, const int coll, Field def)
{
clear(def);
}
template<typename Field>
plane_metric::plane<Field>::plane(Field** field)
{
this->field = field;
}
template<typename Field>
plane_metric::plane<Field>::plane(Field** field, Field def)
{
clear(def);
}
template<typename Field>
void plane_metric::plane<Field>::fill(Field ch)
{
clear(ch);
}
Если вы собираетесь использовать делегирование конструкторов - используйте. Но это тем не менее не избавляет вас от необходимости предоставлять тело для конструктора, пусть даже и пустое
plane(const int str, const int coll, Field def) : plane(str, coll)
{}
Однако дальше по коду вы вдруг снова предоставляете определение для того же самого конструктора. Что это за чушь? Определение должно быть одно. Соберите все в одно место.
Либо в определении класса оставьте только объявление конструктора
plane(const int str, const int coll, Field def);
а все остальное поместите в определение конструктора за пределами класса
template<typename Field>
plane_metric::plane<Field>::plane(const int str, const int coll, Field def) : plane(str, coll)
{
clear(def);
}
Либо все перенесите в определение класса. Либо туда, либо туда.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты