Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.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++做我自己的图形项目,我遇到了一个问题,我确信它很容易解决,但是我似乎无法把它解决。我正在构建一个模板图类,其中声明了一个顶点类,如下所示: template <typename T> class graph{ public: class vertex{ public: bool visited; //used for paths. True if vertex has been visited //vertex constructor vertex(const T& d = T{}, int i = 0): data(d), visited(false), id(i){ std::cout << "Just created a vertex using its constructor :)\n";} //vertex move constructor vertex(T&& d, int i = 0): data(std::move(d)), visited(false), id(i){} //returns vertex ID int returnID() const{ return id; }; //returns data in vertex T& operator*(){ return retrieve(); } //returns const reference to data in vertex const T& operator*() const{ return retrieve(); } //returns list of adjacent vertices std::list<vertex>& getList() const{ return adjacent; } //adds vertex to current vertex's adjacency list void addToList(const vertex& add){ if(!isAdjacent(add)) adjacent.push_back(add); } //returns true if vertices are adjacent bool isAdjacent(const vertex& add){ return (find(begin(adjacent), end(adjacent), add) == adjacent.end()); } //overloaded equal operator for vertex class bool operator==(const vertex& add){ if(data == *add && id == add.returnID()) return true; return false; } private: T data; //vertex stores data of any type std::list<vertex> adjacent; //list of adjacent vertices int id; T& retrieve() const{ return data; } ]; ]; 模板 类图{ 公众: 类顶点{ 公众: bool visted;//用于路径。如果顶点已被访问,则为True //顶点构造函数 顶点(常数T&d=T{},int i=0):数据(d),访问(false),id(i){ 标准::cout_C++_Graph - Fatal编程技术网

传递不同数据类型的问题 我现在正在用C++做我自己的图形项目,我遇到了一个问题,我确信它很容易解决,但是我似乎无法把它解决。我正在构建一个模板图类,其中声明了一个顶点类,如下所示: template <typename T> class graph{ public: class vertex{ public: bool visited; //used for paths. True if vertex has been visited //vertex constructor vertex(const T& d = T{}, int i = 0): data(d), visited(false), id(i){ std::cout << "Just created a vertex using its constructor :)\n";} //vertex move constructor vertex(T&& d, int i = 0): data(std::move(d)), visited(false), id(i){} //returns vertex ID int returnID() const{ return id; }; //returns data in vertex T& operator*(){ return retrieve(); } //returns const reference to data in vertex const T& operator*() const{ return retrieve(); } //returns list of adjacent vertices std::list<vertex>& getList() const{ return adjacent; } //adds vertex to current vertex's adjacency list void addToList(const vertex& add){ if(!isAdjacent(add)) adjacent.push_back(add); } //returns true if vertices are adjacent bool isAdjacent(const vertex& add){ return (find(begin(adjacent), end(adjacent), add) == adjacent.end()); } //overloaded equal operator for vertex class bool operator==(const vertex& add){ if(data == *add && id == add.returnID()) return true; return false; } private: T data; //vertex stores data of any type std::list<vertex> adjacent; //list of adjacent vertices int id; T& retrieve() const{ return data; } ]; ]; 模板 类图{ 公众: 类顶点{ 公众: bool visted;//用于路径。如果顶点已被访问,则为True //顶点构造函数 顶点(常数T&d=T{},int i=0):数据(d),访问(false),id(i){ 标准::cout

传递不同数据类型的问题 我现在正在用C++做我自己的图形项目,我遇到了一个问题,我确信它很容易解决,但是我似乎无法把它解决。我正在构建一个模板图类,其中声明了一个顶点类,如下所示: template <typename T> class graph{ public: class vertex{ public: bool visited; //used for paths. True if vertex has been visited //vertex constructor vertex(const T& d = T{}, int i = 0): data(d), visited(false), id(i){ std::cout << "Just created a vertex using its constructor :)\n";} //vertex move constructor vertex(T&& d, int i = 0): data(std::move(d)), visited(false), id(i){} //returns vertex ID int returnID() const{ return id; }; //returns data in vertex T& operator*(){ return retrieve(); } //returns const reference to data in vertex const T& operator*() const{ return retrieve(); } //returns list of adjacent vertices std::list<vertex>& getList() const{ return adjacent; } //adds vertex to current vertex's adjacency list void addToList(const vertex& add){ if(!isAdjacent(add)) adjacent.push_back(add); } //returns true if vertices are adjacent bool isAdjacent(const vertex& add){ return (find(begin(adjacent), end(adjacent), add) == adjacent.end()); } //overloaded equal operator for vertex class bool operator==(const vertex& add){ if(data == *add && id == add.returnID()) return true; return false; } private: T data; //vertex stores data of any type std::list<vertex> adjacent; //list of adjacent vertices int id; T& retrieve() const{ return data; } ]; ]; 模板 类图{ 公众: 类顶点{ 公众: bool visted;//用于路径。如果顶点已被访问,则为True //顶点构造函数 顶点(常数T&d=T{},int i=0):数据(d),访问(false),id(i){ 标准::cout,c++,graph,C++,Graph,const修饰符使此方法成为const方法。这意味着,本质上,它的this是指向const类实例的指针。由于数据不是用可变修饰符声明的,数据是const值,编译器正在抱怨因为它不能返回对可变值的引用,因为data是一个常量值 将方法更改为: const T& retrieve() const{ return data; } 或者,我不明白为什么这里需要引用,只是: T retrieve() const{ return data; } 你

const
修饰符使此方法成为
const
方法。这意味着,本质上,它的
this
是指向
const
类实例的指针。由于
数据
不是用
可变
修饰符声明的,
数据
const
值,编译器正在抱怨因为它不能返回对可变值的引用,因为
data
是一个常量值

将方法更改为:

            const T& retrieve() const{ return data; }
或者,我不明白为什么这里需要引用,只是:

            T retrieve() const{ return data; }

你应该在快速放弃之前尝试理解这些编译器错误。C++编译错误是典型的典型的钝性,这是事实,但是在这种情况下,你应该能够在注视这些错误消息后,找出几分钟后编译器告诉你的内容。我不能给你投赞成票,因为我还没有被允许投票,但是如果有人看到这个,给这个人投赞成票!
            const T& retrieve() const{ return data; }
            T retrieve() const{ return data; }