1

这就是问题所在:我有一个名为“state”的类,它存储了一个 int 向量。在我的程序中,我正在创建一个状态向量,但之后当我尝试获取 int 向量的值时,它似乎只是空的。我创建了一个 .cpp 文件来测试它:

状态.h:

#ifndef STATE_H 
#define STATE_H

#include <vector>

class state {
    public:
        std::vector<int> vectorstate;
        ~state(); 
        state(); 
        state(state &sta); 
        state(const state &sta); 
        state & operator= (const state &sta);
        bool operator==(const state &sta) const;
};

#endif

状态.cpp:

#include "state.h"
using namespace std;

state::~state(){
}

state::state(){
} 

state::state(state &est){
    for(int i=0;i<vectorstate.size();i++)
        vectorstate[i] = est.vectorstate[i];
}

state::state(const state &est){
    for(int i=0;i<vectorstate.size();i++)
        vectorstate[i] = est.vectorstate[i];
}

state & state::operator= (const state &est) {
    if (this == &est) return *this;
    for(int i=0;i<vectorstate.size();i++)
        vectorstate[i] = est.vectorstate[i];
    return *this;
}

bool state::operator==(const state &est) const {
    for(int i=0;i<vectorstate.size();i++)
        if(vectorstate[i] != est.vectorstate[i])
            return false;
    return true;
}

main.cpp(用于测试目的):

#include <iostream>
#include <algorithm>
#include <vector>
#include "state.h"
using namespace std;

int main(){
    state before, after;
    for(int i=0;i<9;i++)
        before.vectorstate.push_back(i);
    for(int i=0;i<before.vectorstate.size();i++)
        cout << before.vectorstate[i] << " ";
    cout << endl << endl;
    for(int i=3;i<12;i++)
        after.vectorstate.push_back(i);
    for(int i=0;i<after.vectorstate.size();i++)
        cout << after.vectorstate[i] << " ";
    cout << endl << endl;
    vector<state> vetor;
    vetor.push_back(before);
    vetor.push_back(after);
    for(int i=0;i<vetor[0].vectorstate.size();i++)
        cout << vetor[0].vectorstate[i] << " ";
    cout << endl;
    for(int i=0;i<vetor[1].vectorstate.size();i++)
        cout << vetor[1].vectorstate[i] << " ";
    cout << endl;
    state aux;
    aux = vetor.front();
    for(int i=0;i<aux.vectorstate.size();i++)
        cout << aux.vectorstate[i] << " ";
    return 0;
}

这个输出:

http://i.imgur.com/A60K72e.jpg
(对不起链接,我不能在这里发布图片,我猜是声誉的原因)。



如您所见,我尝试了不同的方式来访问这个 int 向量,但它没有给我任何结果,任何帮助将不胜感激!

4

2 回答 2

2

问题在于您对复制构造函数和赋值运算符的实现。

state & state::operator= (const state &est) {
    if (this == &est) return *this;
    for(int i=0;i<vectorstate.size();i++)
        vectorstate[i] = est.vectorstate[i];
    return *this;
}

如果vectorstateofthis当前为空,vectorstate.size()则将返回0并且永远不会执行 for 循环的内容。在您的复制构造函数和赋值运算符中,确保复制完整的向量(std::vector具有有效的复制构造函数)。

或者更好的是,不要实现它们,让编译器生成复制构造函数和赋值来完成工作。

于 2014-05-20T13:49:59.153 回答
0

我对您的代码进行了“一点”修改,瞧:

状态.cpp

#include <algorithm>
#include "state.h"

using namespace std;
state::state() {}
state::state(const state &est) : vectorstate(est.vectorstate) {}
state & state::operator= (const state &est) {
  if (this == &est) return *this;
  vectorstate.resize(est.vectorstate.size());
  std::copy(est.vectorstate.begin(), est.vectorstate.end(), vectorstate.begin());
  return *this;
}
bool state::operator==(const state &est) const { return est.vectorstate == vectorstate; }

状态.h

    #ifndef STATE_H 
    #define STATE_H

    #include <vector>

    struct state {
      std::vector<int> vectorstate;
      state();
      state(const state &sta);
      state & operator=(const state &sta);
      bool operator==(const state &sta) const;
    };
    #endif

原因/错误:

  1. 您在复制构造函数中搞砸了。vectorstate调用复制构造函数后为空,因此无法通过下标复制元素。
  2. 你在你的赋值运算符中搞砸了。您必须首先调整向量的大小,然后复制另一个对象的元素。
  3. 在您的等式运算==符中,对向量应用运算符就足够了。
于 2014-05-20T13:56:07.723 回答