如何将对象存储在向量中的对象中? (C++)

Posted

技术标签:

【中文标题】如何将对象存储在向量中的对象中? (C++)【英文标题】:How Do I Store Objects in a Object in a Vector? (C++) 【发布时间】:2014-03-17 07:26:12 【问题描述】:

我希望这不是一个愚蠢的问题。基本上我想访问存储在一个类中的字符串(语句是我正在使用的名称),在一个语句类型的向量中。基本上我试图将对象存储在对象的动态层次结构中。 Types.cpp:

#include<iostream>
#include<fstream>
#include <string>
#include <vector>
using namespace std;

class Statement

public:
vector<string> Inner_String;
vector<Statement> Inner_Statement;
string contents;

void set_contents (string);
string get_contents() return contents;
void new_string(string);
string get_string(int v)return Inner_String[v];
void new_Inner_Statement(Statement);
Statement get_Inner_Statement(int v)return Inner_Statement[v];
;

void Statement::set_contents(string s)
contents = s;


void Statement::new_string(string s)
Inner_String.push_back(s);


void Statement::new_Inner_Statement(Statement s)
Inner_Statement.push_back(s);

主要方法:

#include <iostream>
#include "FileIO.h"
#include "Types.h"

using namespace std;
int main()

Statement test;
test.new_Inner_Statement(Statement());
Statement a = test.get_Inner_Statement(0);
a.set_contents("words");
cout << a.get_contents();
test.get_Inner_Statement(0).set_contents("string");
cout << test.get_Inner_Statement(0).get_contents();
return 0;

发生的事情是 cout

【问题讨论】:

您的代码在技术上表现出未定义的行为。您不能让类 T 包含 vector&lt;T&gt; 数据成员。 std::vector 需要一个完整的类型。您可能想查看Boost.Container 库,它们有一些不完整类型的容器。 【参考方案1】:

看这段代码:

test.get_Inner_Statement(0).set_contents("string");
^^^^^^^^^^^^^^^^^^^^^^^^^^^

它调用这个函数:

Statement get_Inner_Statement(int v)

它返回一个类型声明的副本对象(临时)。在此对象上,您调用 set_contents 函数,调用结束时该函数不再存在。

然后,你调用:

test.get_Inner_Statement(0).get_contents();

从未更改的语句中创建一个新的临时文件,并尝试获取其内容。

【讨论】:

以上是关于如何将对象存储在向量中的对象中? (C++)的主要内容,如果未能解决你的问题,请参考以下文章

如何找到存储在 C++ 向量中的对象的类方法?

通过 C++ 中的外部函数更改存储在另一个对象的向量中的对象中元素的值

如何在 C++ 中向向量中添加新对象

如何在 C++ 中将一个对象从一个向量复制到另一个向量?

无法访问存储在多维向量中的对象(C++)

如何在 C++ 中使用 for 循环输出向量中的所有对象