【发布时间】:2016-10-12 14:17:59
【问题描述】:
注意:我还是 c++ 新手,虽然这可能是一个简单的问题,但我无法找到解决方案。
目的:
我想将一个空字符串(就像在 java/C# 中那样)传递给我的构造函数。我收到一个错误:
error: no matching function for call to 'ReturnObject::ReturnObject(ResultCode::ClientCode, const char [1])'
return new ReturnObject(ResultCode::ClientCode::enum_FailedOpeningClientSocket, "");
ReturnObject 的目的是封装一个enum 和一个string。
这个错误是什么意思,我该如何解决?
我尝试将我的构造函数参数从QString data 更改为char data 并使用'' 调用,但这导致了错误empty character constant。
调用代码:
return new ReturnObject(ResultCode::ClientCode::enum_FailedSocketConnection, "");
标题:
class ReturnObject
{
public:
ReturnObject(ResultCode enum_code, QString data);
QString getData();
ResultCode getCode();
private:
ResultCode e_code;
QString data_string;
};
实施
#include "returnobject.h"
ReturnObject::ReturnObject(){
data_string="WARN";
}
ReturnObject::ReturnObject(ResultCode enum_code, QString data)
: e_code(enum_code)
, data_string(data)
{}
ResultCode ReturnObject::getCode()
{
return e_code;
}
QString ReturnObject::getData()
{
return data_string;
}
感谢 wasthishelpful 和一些 cmets,我犯了一个可悲的逻辑错误,导致我查看了错误的参数,解决方案是我应该转换我的枚举类 ResultCode 这是父级类到嵌套的classes 之一,在本例中为ClientCode,如下所示从我的枚举类标题中看到
枚举.h
#ifndef ENUMS_H
#define ENUMS_H
class ResultCode{
public:
enum class LoginDialogCode{
enum_LoginSuccess=0,
enum_InternetOffline=1,
enum_ServerOffline=2,
enum_InvalidLoginPass=3,
enum_EmptyLoginPass=4,
enum_FailedRetreivingServerList=5,
enum_TokenFailed=6
};
enum class ClientCode{
enum_SentSuccess=10,
enum_FailedOpeningClientSocket=11,
enum_FailedClientSocketConnection=12,
enum_FailedWritingtoClientSocket=13,
enum_FailedReadingfromClientSocket=14
};
enum class ServerCode{
enum_ReceivedSuccess=20,
enum_FailedOpeningListenSocket=21,
enum_FailedBindingtoListenSocket=22,
enum_FailedAcceptingListenSocket=23,
enum_FailedWritingtoListenSocket=24,
enum_FailedReadingfromListenSocket=25
};
};
#endif // ENUMS_H
【问题讨论】:
-
ResultCode::ClientCode::enum_FailedSocketConnection的类型是什么? -
您期望
ResultCode,但您传递了ClientCode。 -
没有构造函数采用
ResultCode::ClientCode参数,但您已经确定第二个参数是您忽略第一个参数的问题。 -
@GillBates 我真是太愚蠢了,感谢您指出这一点
-
@molbdnilo 谢谢,我没看到!