";"标记之前的预期主表达式
expected primary-expression before ';' token
本文关键字:表达式 更新时间:2023-10-16
我正在尝试实现异常并将其从我的方法中抛出。
下面是异常
的h
文件#ifndef EXCEPTION_H
#define EXCEPTION_H
#include <exception>
#include <string>
namespace core {
class no_implementation: public std::exception {
private:
std::string error_message;
public:
no_implementation(std::string error_message);
const char* what() const noexcept;
};
typedef no_implementation noimp;
}
#endif
这里是cpp
file
#include "../headers/exception.h"
using namespace core;
no_implementation::no_implementation(std::string error_message = "Not implemented!") {
this->error_message = error_message;
}
const char* no_implementation::what() const noexcept {
return this->error_message.c_str();
}
这里是方法
std::string IndexedObject::to_string() {
throw noimp;
}
但是显示错误
throw noimp; //expected primary-expression before ';' token
有什么问题吗?
要创建一个临时类型,您需要使用这样的符号(注意额外的括号):
throw noimp();
如果没有括号,则尝试抛出类型而不是对象。除非您将默认值移到声明中,否则您还需要指定字符串:默认值在使用时需要可见。
首先,默认参数(如std::string error_message = "Not implemented!"
)应该放在函数声明中,而不是定义中。也就是说,写入
...
public:
no_implementation(std::string error_message = "Not implemented!");
...
第二,抛出值,而不是类型。你写的是throw noimp;
,但noimp
是一个类的名称。这应该是throw noimp();
或throw noimp("some message here");
。
相关文章:
- (C++)分析树以计算返回错误值的简单算术表达式
- 在VS2010-VS2015下编译时,如何使用decltype作为较大类型表达式的LHS
- 提升精神:解析布尔表达式并简化为规范范式
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 使用正则表达式regex_search在字符串中查找字符串
- 如何确认我的constexpr表达式实际上已经在编译时执行
- 概念中的cv限定符需要表达式参数列表
- 为什么constexpr的性能比正常表达式差
- 对于结构,表达式必须是可修改的ivalue
- 当一个值是非常量但用常量表达式初始化时使用constexpr
- 将fold表达式与std::一起用于两个元组
- 断言中的Fold表达式在某些计算机上编译,但在其他计算机上不编译
- 标记 '","' 之前的预期主表达式
- gcc和clang在表达式是否为常量求值的问题上存在分歧
- 如何计算具有指定类型的表达式的相对精度和绝对精度
- 带有用户定义类的c++折叠表达式
- 即使使用调试编译标志,表达式也是"optimized out"
- holeMenuProgram.cpp:38:1 错误:'}'令牌之前的预期主表达式
- 在 C++ 中使用正则表达式错误时出现问题 括号表达式中的范围无效
- 这 4 个 lambda 表达式之间有什么区别?