c++ - 对非 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()函数我该如何解决这个问题?
解决方案
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{};
推荐阅读
- angular - 如何从 firebase 实时数据库中获取用户列表及其 UID
- divide-and-conquer - 如何使用分治法将十进制数转换为二进制数?
- php - 我尝试更多上传图片,但即使我尝试更多,它也会提供错误
- javascript - 使用 nodejs 添加对象数组并在 file.txt 上读取它
- python - 用于熊猫数据框的 jupyter notebook 中的交互式多图表小部件
- arduino - VS Code 为 Arduino 提供标头错误?缺少官方标题?
- java - 如何从java中的文件中提取特定文本?
- java - Jacoco 对单元和集成测试的覆盖率与覆盖率相结合
- r - 如何使我现有的 R 代码输出特定计数的奇数和偶数?
- javascript - Vue.js 正确重新渲染数组项