C++ 使用c++;
我写了一个代码来表示第三个类,分别取了其他两个类的实例,第一个和第二个,在我添加了一个矩阵Mat之前,一切都很好,第三个类中的方法get_Mat,在代码中它的名称是Third,这段代码不会产生任何错误消息,但是当它执行到main中返回0之前的行时,它会终止,因为编译器遇到了错误,需要关闭,我希望您能帮助我找到问题 谢谢C++ 使用c++;,c++,class,gnu,C++,Class,Gnu,我写了一个代码来表示第三个类,分别取了其他两个类的实例,第一个和第二个,在我添加了一个矩阵Mat之前,一切都很好,第三个类中的方法get_Mat,在代码中它的名称是Third,这段代码不会产生任何错误消息,但是当它执行到main中返回0之前的行时,它会终止,因为编译器遇到了错误,需要关闭,我希望您能帮助我找到问题 谢谢 #include<iostream> #include<vector> #include <stdlib.h> using namesp
#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;
}
#包括
#包括
#包括
使用名称空间std;
第一堂课//这是第一堂课
{
私人:
无符号整数id;
公众:
无符号int get_id(){return id;};
void set_id(无符号int值){id=value;};
一(无符号int init_val=0):id(init_val){};//构造函数
~One(){};//析构函数
};
////////////////////////////////////////////////////////////////////
第二堂课//第二堂课
{
私人:
一个先一个;
一秒一秒;
无符号整数秩;
公众:
无符号int get_rank(){return rank;};
无效集_秩(无符号整数值){rank=value;};
无符号int get_One_1(){return first_One.get_id();};
无符号int get_One_2(){return second_One.get_id();};
二(常数一和一_1=0,常数一和一_2=0,无符号整数初始_秩=0)
:第一级(一级),第二级(一级),等级(初始等级)
{
}
~Two(){};//析构函数
};
/////////////////////////////////////////////////////////////
三班//三班
{
私人:
std::矢量的;
std::向量2;
向量矩阵;
公众:
三(向量和一个向量,向量和两个向量)
:一(一个向量),二(两个向量)
{
for(无符号整数i=0;i cout首先,当您在此处构建类三的对象时:
Three item(elements, members);
它的Mat
成员是一个大小为零的向量。构造函数没有立即崩溃纯粹是巧合。例如,如果您需要一个大小为n
xm
的矩阵,您必须这样做
Mat.resize(n);
for(unsigned int i =0;i<n;++i)
Mat[i].resize(m);
您是否打算在其中一个循环中不使用twos.size()
?首先感谢您试图帮助我发现代码中的错误,您看起来是唯一一个有能力阅读代码的英雄,其次是twos.size()我不想使用它,无论如何,这个想法是实现2D矩阵,索引与其他类的实例相关,最后我没有明白你的想法来调整上面的代码,如果可能的话,请提到什么部分必须被什么部分替换,我尝试了一些选项,但没有成功。谢谢我上面说的:你需要d来设置Mat
对象在使用之前在代码中的某个位置的大小。在当前代码中,Mat
是一个0x0矩阵,每当访问元素时都会崩溃,因为您没有为任何元素保留空间。如果不知道如何操作,请查阅“调整向量c++的大小”。
for(unsigned int i = 0; i < ones.size(); ++i)
for(unsigned int j = 0; j < ones.size(); ++j)
Mat[i][j] = 1;