【发布时间】:2017-03-14 09:20:55
【问题描述】:
尝试使用以下命令编译我的代码:
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 语句中创建了一个无用的变量,我认为我的运算符重载会发挥作用,尽管我不能 100% 确定我是否正确使用它......
【问题讨论】:
-
如果您只想抑制文件内的警告,您可以查看文档的这一部分:gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html
-
第 40 行是哪一行?我敢打赌它是带有
if的那个,在这里你声明了一个const char*类型的局部变量ostr(在它的名字周围加上不必要的括号)。您想在那里实现什么目标? -
警告位于
if (!bool(E)) { const char*(ostr); }行,它声明了一个名为ostr的变量,该变量隐藏了作为函数参数的ostr。您能解释一下您打算该声明实际实现的目标吗? .... 因为,很可能,它没有实现它。 -
仅供参考,我们在 SO 上保留了 good C++ books 的列表;你可能想看一看。
-
编译器错误和警告告诉您它们源自哪一行。实际上,在您的实际问题中包含这些信息并注意它,在诊断 C++ 错误和警告时非常重要。
标签: c++ c++11 suppress-warnings