我有两个简单的代码,我不知道它们的问题是什么,但我怀疑我无法使用当前代码定义类类型的向量。 任何帮助!
#include <iostream>
#include <cmath>
#include <algorithm>
#include "Pair.h"
#include <vector>
#include <string>
using namespace std;
class Function{
public:
Function();
Function(const Function& g);
/* Function operator+(const Pair& input) const;
Function& operator+=(const Pair& input);
Function operator-(const Pair& input) const;
Function& operator-=(const Pair& input);
int& operator()(int input);
Function operator+(const int input) const;
Function operator-(const int input) const;
Function operator/(const int input) const;
Function operator*(const int input) const;
Function& operator++();
//Function& operator()++;
Function& operator--();
//Function& operator()--;
Function operator=(const Function& input) const;
Function operator+(const Function& input) const;
Function& operator+=(Function& input);
Function& operator-=(Function& input);
bool operator==(Function& input) const;
Function operator|(const Function &input) const;
Function& operator|=(Function &input);
Function operator()(const Function &input) const;
ostream operator<<(const Function &input) const;
*/
vector<Pair> get_function_pairs() const;
//void set_function_pairs(Function g);
void add_pair(Pair g);
void add_vector_of_pairs(vector<Pair> g);
void sort_pairs();
private:
vector<Pair> function_pairs;
};
void Function::add_pair(Pair g){
function_pairs.push_back(g);
}
/*vector<Pair> Function::get_function_pairs() const{
return function_pairs;
}
Function::Function(const Function& g){
function_pairs.clear();
for(int i = 0; i < g.get_function_pairs().size(); i++){
function_pairs.push_back(g.get_function_pairs()[i]);
}
}
/*Function Function::operator+(const Pair& input) const{
Function a(*this);
a.add_pair(input);
return a;
}*/
/////////////////////////
#include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
#include <string>
#include <sstream>
using namespace std;
class Pair{
public:
Pair(){};
Pair(int xx, int yy);
vector<int> get_pair();
string pair_string();
private:
int x, y;
string pair_show;
stringstream temp;
};
Pair::Pair(int xx, int yy){
x = xx;
y = yy;
temp <<"("<<x <<","<<y<<")";
temp >> pair_show;
temp.clear();
}
vector<int> Pair::get_pair(){
vector<int> result;
result.push_back(x);
result.push_back(y);
return result;
}
string Pair::pair_string(){
return pair_show;
}
P.S:我不能将c ++ 11用于我的作业,所以我决定通过使用sstream库将我的int改为string。
答案 0 :(得分:1)
问题是由于stringstream
成员,concepts CopyAssignable和CopyConstructible未得到满足。
这也可以看作是一个提示,包括一个重量级的东西,如stringstream成员只是为了输出是一个设计缺陷,更不用说重新发明std::pair
轮。
但无论如何 - 这个
#include <vector>
#include <sstream>
class Pair{
public:
Pair() : x(0), y(0), s() {}
Pair(int xx, int yy) : x(xx), y(yy), s() {}
Pair(const Pair& rhs) :
x(rhs.x), y(rhs.y), s(rhs.s.str()) {}
Pair& operator=(const Pair& rhs) {
x = rhs.x;
y = rhs.y;
s.str() = rhs.s.str();
return *this;
}
private:
int x, y;
std::stringstream s;
};
int main()
{
std::vector<Pair> pairs;
pairs.push_back(Pair());
pairs.push_back(Pair(0,1));
return 0;
}