c++ - 结构 vector C++

标签 c++ vector

我在创建结构 vector 时遇到问题。在我的函数 AddApp 中,我无法将新分配的结构“推回”到 vector 中。我收到错误消息“无效参数”。我环顾四周,看看是否有人有类似的问题,但没有任何帮助。谁能指出我的逻辑有什么缺陷?谢谢。

class AppHolder
{
private:
    struct Info
    {
    int refNumber;
    string name;
    string link;
    };

vector<Info> dataBase;

public:
    void AddApp(int ,string ,string );
};

void AppHolder::AddApp(int R, string N, string L)
{
Info *newApp = new Info;
newApp -> name = N;
newApp -> link = L;
newApp -> refNumber = R;

dataBase.push_back(newApp);
}

最佳答案

您的代码失败的原因是 std::vector<Info>::push_back要求您将类型为 Info 的对象传递给它, 但你通过了 Info* .

我们可以使用 Info 来解决这个问题对象而不是使用指向 new 的指针编辑变量:

void AppHolder::AddApp(int R, string N, string L)
{
    Info newApp;
    newApp.name = N;
    newApp.link = L;
    newApp.refNumber = R;
    dataBase.push_back(newApp);
}

Info* newApp = new Info;声明一个指向 Info 的指针,并用 Info 类型的动态创建对象的地址对其进行初始化,之后必须删除,否则不会调用析构函数,也不会释放内存。

Info newApp;声明类型为 Info 的自动变量在作用域结束时调用哪个析构函数,其内存将被释放。

使用 new在现代 C++ 中不鼓励使用指针,因为它需要手册 delete指针,它是异常不安全的(如果在删除之前抛出异常,资源不会被删除)并且涉及编写大量代码(复制构造函数,复制赋值运算符,析构函数,移动构造函数,移动赋值运算符)以确保您的类正常工作正确。但是,在某些情况下需要使用指针(将派生类的实例存储在容器中),在这种情况下,您希望使用可以为您管理资源的智能指针

关于c++ - 结构 vector C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18321605/

相关文章:

c++ - 只有引用时如何正确编写 -> 运算符?

C++指针不起作用

vector - 相交两个先验排序向量的惯用/高效Clojure方法?

c++ - boost::shared_ptr 中没有名为 value_type 的类型

在特定位置用另一个向量的元素替换一个向量的元素

android - 编译android源代码时出现C++错误

c++ - 如果编译器安装了服务包,C++ 运行时是否需要服务包?

java - 我的 Vector 丢失数据有什么原因吗?

c++ - 初始化一个动态 vector 列表

c++ - 指向抽象类的指针数组