我的问题似乎很基础,但我找不到解决方法。我需要编写一个代码来帮助调试,并报告异常抛出的行和位置。问题在于__LINE__
是一个int
值,在以下代码中我无法将其转换为字符串,使用了std::string(line)
:
#pragma once
#include <stdexcept>
#include <cstring>
class CRuntime_error_line: public std::runtime_error
{
public:
CRuntime_error_line(const char * msg, const char * file,int line)
:runtime_error(std::string(msg)+" @"+":"+std::string(line)){}
};
#define runtime_error_line(msg) CRuntime_error_line(msg,__FILE__,__LINE__)
看起来std::string(line)
无法将int转换为字符串,而在线上提出的其他解决方案无法在行内实现,我不知道如何在第二行调用基础构造函数!
编译器输出:
log.h: 在构造函数‘CRuntime_error_line::CRuntime_error_line(const char*,const char*,int)’中: log.h:10:124: 错误:从‘int’到‘const char*’的无效转换[-fpermissive] CRuntime_error_line(const char * msg,const char * file,int line): runtime_error(std::string(msg)+“@”+:“+std :: string(line)){}
(使用g++和Linux环境)
编辑:
应该这样调用宏:
throw runtime_error_line("Invalid somethihng ...!");
std::to_string(line)
- Borgleader‘to_string’不是‘std’的成员
。 - barejto_string
是来自 C++11。 - Jonathan Mee