尝试使用以下命令编译我的代码:
g++ Error.cpp -Wall -std = c++ 0x -o文件名
我收到警告: Error.cpp:40:30:警告:未使用的变量'ostr'[-Wunused-variable]
我已经看到可以删除 -Wall 来禁止显示警告,但是我不想这样做。我想在我的代码中放一些东西来解决它。大约只编码了大约6个月。
// Error.cpp
#define _CRT_SECURE_NO_WARNINGS
// Tried using #define _CRT_UNUSED then doing _CRT_UNUSED(ostr) down below
#include <iomanip>
#include <iostream>
#include <cstring>
#include "Error.h"
void Error::message(const char* errorMessage) {
clear();
m_message = new char[strlen(errorMessage) + 1];
strcpy(m_message, errorMessage);
}
void Error::operator=(const char* errorMessage) {
message(errorMessage);
}
Error::operator const char*() const {
return m_message;
}
Error::operator bool() const {
return m_message == nullptr;
}
std::ostream& ict::operator<<(ostream& ostr, const Error& E) {
(void)ostr; // This didn't work, i still get the warning with or without it
if (!bool(E)) { const char*(ostr); }
return ostr;
}
编辑:是的第40行是带有if的行。由于某种原因,我以为
const char*(ostr)
会将m_message
放在ostr
内,然后可以将其返回并输出到其他地方。我不认识到我只是在if语句中创建了一个无用的变量,以为我的运算符重载会发挥作用,尽管我不确定自己是否正确使用了它,但还不能百分百确定。 最佳答案
如this live example所示,问题不在于函数参数ostr
:return语句使用了那个参数。
问题是您在ostr
中声明了类型为const char *
的局部变量if
:
if (!bool(E)) { const char*(ostr); }
括号是合法的,但是是多余的:该行等效于此:
if (!bool(E)) { const char *ostr; }
您在声明一个局部变量(恰好隐藏了函数参数),并且没有将其用于任何东西。
如果要将消息从
E
流传输到ostr
,则必须执行以下操作:if (!bool(E)) { ostr << static_cast<const char*>(E); }