gpt4 book ai didi

c++ - 使用 C++ 的类中的二维数组

转载 作者:行者123 更新时间:2023-11-28 07:19:40 25 4
gpt4 key购买 nike

我编写了一个代码来呈现一个类 Third 分别采用其他两个类一和二的实例,一切正常,直到我添加了一个矩阵 Mat 和第三类中的方法 get_Mat,在代码中它有第三,这段代码不会产生任何错误消息,但是当它执行到 main 中 return 0 之前的行时,它会终止,因为编译器遇到错误需要关闭,我希望你能帮忙我找到问题了。

谢谢。

#include<iostream>
#include<vector>
#include <stdlib.h>
using namespace std;

class One // this the first class
{
private:
unsigned int id;
public:
unsigned int get_id(){return id;};
void set_id(unsigned int value) {id = value;};
One(unsigned int init_val = 0): id(init_val) {}; // constructor
~One() {}; // destructor
};
////////////////////////////////////////////////////////////////////
class Two // the second class
{
private:
One first_one;
One second_one;
unsigned int rank;
public:
unsigned int get_rank() {return rank;};
void set_rank(unsigned int value) {rank = value;};
unsigned int get_One_1(){return first_one.get_id();};
unsigned int get_One_2(){return second_one.get_id();};

Two(const One& One_1 = 0, const One& One_2 =0 , unsigned int init_rank = 0)
: first_one(One_1), second_one(One_2), rank(init_rank)
{
}

~Two() {} ; // destructor

};
/////////////////////////////////////////////////////////////
class Three // the third class
{
private:
std::vector<One> ones;
std::vector<Two> twos;
vector<vector<unsigned int> > Mat;

public:
Three(vector<One>& one_vector, vector<Two>& two_vector)
: ones(one_vector), twos(two_vector)
{
for(unsigned int i = 0; i < ones.size(); ++i)
for(unsigned int j = 0; j < ones.size(); ++j)
Mat[i][j] = 1;
}

~Three() {};

vector<One> get_ones(){return ones;};
vector<Two> get_twos(){return twos;};
unsigned int get_Mat(unsigned int i, unsigned int j) { return Mat[i][j];};
void set_ones(vector<One> vector_1_value) {ones = vector_1_value;};
void set_twos(vector<Two> vector_2_value) {twos = vector_2_value;};


};
///////////////////////////////////////////////////////////////////////
int main()
{
cout<< "Hello, This is a draft for classes"<< endl;
vector<One> elements(5);
cout<<elements[1].get_id()<<endl;

vector<Two> members(10);
cout<<members[8].get_One_1()<<endl;

Three item(elements, members);
cout<<item.get_ones()[3].get_id() << endl;

cout << item.get_Mat(4, 2) << endl;
return 0;
}

最佳答案

首先,当你构建类 Three 的对象时这里:

 Three item(elements, members);

它的 Mat成员是 vector<vector<unsigned int> >大小为零。构造函数没有立即崩溃纯属巧合。例如,如果您需要大小为 n 的矩阵x m , 你必须做

 Mat.resize(n);
for(unsigned int i =0;i<n;++i)
Mat[i].resize(m);

在您可以安全地使用像 Mat[i][j] 这样的表达式之前.

其次,在 Three 的构造函数中:

   for(unsigned int i = 0; i < ones.size(); ++i)
for(unsigned int j = 0; j < ones.size(); ++j)
Mat[i][j] = 1;

您是否打算不使用 twos.size()在其中一个循环中?

关于c++ - 使用 C++ 的类中的二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19690750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com