Ошибка: конструктор не имеет возвращаемого типа и говорит, что переменные x и y не объявлены - PullRequest
0 голосов
/ 27 марта 2020

Мне нужно создать шаблон для двух точек (x и y). Компилятор говорит, что переменные являются «необъявленными идентификаторами», и я не знаю почему, но я уже объявил их в конструкторе !!

Я также получаю сообщение о том, что конструктор не имеет возвращаемого типа. Что это значит?

Как я могу исправить эти ошибки?

Это код заголовка

#include <iostream>
#ifndef POINT_H
#define POINT_H

template <typename T>

class Point{

  private:

    T x;
    T y;

  public :

    Point(T x, T y);
    T getX();
    T getY();
    void setX(T xcoord);
    void setY(T ycoord);
    void print();
};

#endif

template <typename T>
T Point<T> :: Point(T x, T y){
  xcoord = x;
  ycoord = y;
}

template <typename T>
T Point<T> :: getX() {
  return x;
}

template <typename T>
T Point<T> :: getY(){
  return y;
}

template <typename T>
void T Point<T> :: setX( T xcoord){
  x = xcoord;
}

Это основной файл

#include <iostream>
#include "point.h"
using namespace std;

int main(){
  Point<int> p1(3,5);
  p1.print();
  return 0;
}

Обратите внимание, что код в основном файле был закомментирован при запуске консоли. Эти ошибки происходят только из заголовочного файла

Ошибки:

Переменная T в конструкторе setx имеет неполный тип , ожидается ";"

неизвестный тип "T"

дополнительная квалификация члена на члене "setx"

необъявленное использование идентификатора "x"

image

Ответы [ 2 ]

1 голос
/ 27 марта 2020
template <typename T>
T Point<T> :: Point(T x, T y){
  xcoord = x;
  ycoord = y;
}

должно быть (ИСПРАВЛЕНО)

template <typename T>
Point<T> :: Point(T x, T y){
  this->x = x;
  this->y = y;
}

Конструкторы не имеют возвращаемых типов (как говорится в ошибке), а xcoord и ycoord не являются членами вашего класса.

также

template <typename T>
void T Point<T> :: setX( T xcoord) {
  x = xcoord;
}

должно быть

template <typename T>
void Point<T> :: setX( T xcoord) {
  x = xcoord;
}

void T недопустимый тип.

0 голосов
/ 27 марта 2020

Если вы получаете несколько ошибок, всегда начинайте с исправления первой. Более поздние ошибки слишком часто вызваны неправильным пониманием компилятором всего после первой ошибки. Ошибка, которую вы описываете, не имеет значения.

Для исправления первой ошибки вам необходимо решить, хотите ли вы возвращаемое значение типа void (т.е. без возвращаемого значения) или типа T. Для метода установки я думаю void это уместно, поэтому просто удалите T, который соответствует объявлению внутри класса.

Это (как вы подтвердили в комментарии) исправляет первую из ошибок, и из-за неправдоподобного и противоречивого вопроса я считаю это быть суть вопроса. Пожалуйста, создайте новый вопрос о том, как реализовать конструктор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...