C++ 错误:隐式声明的定义‘;constexpr DistanceTotale::DistanceTotale(const DistanceTotale&;)&x2019;
当我不使用标准C++11编译时,我有一个错误,我不知道为什么。这是我的.hpp:C++ 错误:隐式声明的定义‘;constexpr DistanceTotale::DistanceTotale(const DistanceTotale&;)&x2019;,c++,C++,当我不使用标准C++11编译时,我有一个错误,我不知道为什么。这是我的.hpp: #include <vector> #ifndef VOYAGEUR_HPP #define VOYAGEUR_HPP class DistanceTotale { protected: int M; double * dist; public: DistanceTotale(int M0) : M(M0), dist(new doub
#include <vector>
#ifndef VOYAGEUR_HPP
#define VOYAGEUR_HPP
class DistanceTotale {
protected:
int M;
double * dist;
public:
DistanceTotale(int M0) : M(M0), dist(new double[M0*M0]) {}
DistanceTotale(const DistanceTotale & D);
double distance(int i, int j) const { return dist[i+M*j]; }
double & distance(int i, int j) { return dist[i+M*j]; }
double operator()(const std::vector<int> & x) const;
};
#endif
你的任务中缺少一个分号。它应该是
DistanceTotale(intm0):M(M0),dist(新的双精度[M0*M0]){代码>。通过这个小的添加,它对我来说很好(初始化一个对象,然后使用copyctor创建另一个对象),编译器似乎不接受copyctor声明。你没有任何预处理器定义吗?我只能通过删除头文件中D的copyctor声明来重现错误。这是我能看到的唯一原因,或者你包含了错误的头文件。谢谢,是semcolon@Roim,所以在C++11之后,我们才不需要它。你的命令中缺少一个分号。它应该是DistanceTotale(intm0):M(M0),dist(新的双精度[M0*M0]){代码>。通过这个小的添加,它对我来说很好(初始化一个对象,然后使用copyctor创建另一个对象),编译器似乎不接受copyctor声明。你没有任何预处理器定义吗?我只能通过删除头文件中D的copyctor声明来重现错误。这是我能看到的唯一原因,或者你包含了错误的头文件。谢谢,是semcolon@Roim,所以在C++11之后我们才不需要它。
#include "voyageur.hpp"
DistanceTotale::DistanceTotale(const DistanceTotale & D) : M(D.M), dist(nullptr) {
dist = new double[M*M];
for(int i = 0; i<M*M; i++) {
dist[i] = D.dist[i];
}
}
DistanceTotale::DistanceTotale(const DistanceTotale & D) : M(D.M), dist(nullptr) {