Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 错误:构造函数没有返回类型,它表示变量x和y未声明_C++_Templates - Fatal编程技术网

C++ 错误:构造函数没有返回类型,它表示变量x和y未声明

C++ 错误:构造函数没有返回类型,它表示变量x和y未声明,c++,templates,C++,Templates,我必须为两点创建一个模板(x和y)。编译器说变量是“未声明的标识符”,我不知道为什么,但我已经在构造函数中声明了 我还得到一个关于构造函数没有返回类型的错误。这是什么意思 如何修复这些错误 这是标题代码 #include <iostream> #ifndef POINT_H #define POINT_H template <typename T> class Point{ private: T x; T y; public :

我必须为两点创建一个模板(
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;
}
#包括
#ifndef点H
#定义点
模板
类点{
私人:
tx;
T y;
公众:
点(tx,ty);
T getX();
T getY();
void setX(T xcoord);
void setY(T ycoord);
作废打印();
};
#恩迪夫
模板
T点::点(T x,T y){
xcoord=x;
ycoord=y;
}
模板
T点::getX(){
返回x;
}
模板
T点::getY(){
返回y;
}
模板
void T Point::setX(T xcoord){
x=xcoord;
}
这是主文件

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

int main(){
  Point<int> p1(3,5);
  p1.print();
  return 0;
}
#包括
#包括“h点”
使用名称空间std;
int main(){
点p1(3,5);
p1.print();
返回0;
}
请注意,主文件中的代码在运行控制台时被注释掉。这些错误仅来自头文件

#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;
}
错误:

setx构造函数中的变量T的类型不完整,应为“;”

未知类型“T”

成员“setx”的额外成员资格

未声明使用标识符“x”

应该是

template <typename T>
void Point<T> :: setX( T xcoord) {
  x = xcoord;
}
模板
空位点::setX(T xcoord){
x=xcoord;
}

void T
不是有效的类型。

如果出现多个错误,请始终首先开始修复第一个错误。后面的错误往往是由于编译器在第一个错误之后误解了所有内容造成的。你所描述的错误无关紧要

为了修复第一个错误,您需要决定是要返回void类型的值(即没有返回值)还是T类型的值。对于setter方法,我认为void是合适的,所以只需删除T,它与类内的声明相匹配


这(正如你在评论中确认的)修正了第一个错误,因为其他难以置信的和不一致的问题,我认为这是问题的核心。请创建一个关于如何构造构造函数的新问题。

为什么你的介词在你的文件中间?它都在一个文件中。我的教授写了这个代码供参考,所以我不知道为什么它不起作用。这是你的教授给你的一个文件?他们说应该编译吗?这是家庭作业吗?任务是找出错误并修复它们吗?请提供一个答案。也许这就是你所有的代码,如果你编译它(假设它是一个代码文件,我有点怀疑),你会得到你描述的错误。但是对于一个MRE,你需要提供你得到的错误消息,全文,直接在这里,逐字逐句,以及导致它们在你显示的代码中被识别的行。当我做这个修复时,我得到一个错误,告诉我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;
}