首页 > 解决方案 > 对非 const 对象的引用不能用该对象的 r 值初始化

问题描述

我创建一个对象并尝试通过引用通过多个​​函数传递该对象

#include<iostream>
#include <string>
#include "DBMS.h"
using namespace std;

void Home(DBMS &);
int main()
{
    DBMS dbms();
    Home(dbms); // this is where the error is 
    return 0;
}

void Home(DBMS &dbms)
{
    string dbName;
    dbms.addDatabase(dbName);
}

这是 DBMS.h

#pragma once
#include <iostream>
#include <string>
#include <vector>
#include "Database.h"
using namespace std;

class DBMS
{
public:
    DBMS();

    void addDatabase(string);
    Database& getDatabase(string);
    Database& getDatabaseByIndex(int);
    int getDatabaseIndex(string);
    void removeDatabase(string);
    int size();
    ~DBMS();

private:
    vector <Database> dbList;
    string error;
};

DBMS::DBMS()
{
}



void DBMS::addDatabase(string tbNames)
{
    vector<string> TB_Names = tokenize(tbNames);
    int size = TB_Names.size();
    for (int i = 0; i < size; i++)
    {
        if (getDatabaseIndex(TB_Names[i]) == -1)
        {
            Database tb(TB_Names[i]);
            dbList.push_back(tb);
        }
        else
            throw "Already esited Database with given name";
    }
}

Database& DBMS::getDatabase(string tbName)
{
    int i;
    int size = dbList.size();
    for (i = 0; i < size; i++)
    {
        if (dbList[i].getName() == tbName)
            return dbList[i];
    }

    throw invalid_argument("Database not found");

}

Database& DBMS::getDatabaseByIndex(int index)
{
    return dbList[index];
}

void DBMS::removeDatabase(string TB_Name)
{
    int i;
    int size = dbList.size();
    for (i = 0; i < size; i++)
    {
        if (dbList[i].getName() == TB_Name)
        {
            dbList.erase(dbList.begin() + i);
            break;
        }
    }

    if (i == size)
        throw invalid_argument("Field not found");


}

int DBMS::getDatabaseIndex(string TB_Name)
{
    int size = dbList.size();
    for (int i = 0; i < size; i++)
    {
        if (dbList[i].getName() == TB_Name)
            return i;
    }
    return -1;
}

int DBMS::size()
{
    return dbList.size();
}
DBMS::~DBMS()
{
}

(数据库类型只是我创建的另一个类。没什么特别的。别担心(除非你认为我必须这样做))错误声明是:>“DBMS &”类型的引用(非 const-合格的)不能用“DBMS()”的值初始化我找到了一个我应该修复的建议,void Home(DBMS &dbms)void Home(const DBMS &dbms) 如果我这样做,我不能使用addDatabase()函数我该如何解决这个问题?

标签: c++

解决方案


This declaration

DBMS dbms();

is a vexing parse. You are not declaring a variable named dbms, but instead you are actually declaring a function named dbms that takes no arguments, and returns a DBMS. Passing this object to a function expecting a DBMS object will not work.

You can fix this with:

DBMS dbms{};

推荐阅读