所以我在使用basename作为我的学校编程作业时遇到了一个问题
我试过让它工作的一个更简单的版本--我让它工作了,但仍然搞不清楚在这种情况下我到底应该做什么。
// $Id: util.cpp,v 1.1 2016-06-14 18:19:17-07 - - $
#include <libgen.h>
#include <cstring>
using namespace std;
#include "util.h"
ydc_exn::ydc_exn (const string& what): runtime_error (what) {
}
string exec::execname_; // Must be initialized from main().
int exec::status_ = EXIT_SUCCESS;
void exec::execname (const string& argv0) {
execname_ = basename (argv0.c_str());
cout << boolalpha;
cerr << boolalpha;
DEBUGF ('Y', "execname = " << execname_);
}
void exec::status (int new_status) {
new_status &= 0xFF;
if (status_ < new_status) status_ = new_status;
}
ostream& note() {
return cerr << exec::execname() << ": ";
}
ostream& error() {
exec::status (EXIT_FAILURE);
return note();
}只是尝试编译代码-我在c++中的错误消息是:
'
util.cpp:15:16: error: no matching function for call to 'basename'
execname_ = basename (argv0.c_str());
^~~~~~~~
/usr/include/libgen.h:40:7: note: candidate function not viable: 1st argument ('const std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>
>::value_type *' (aka 'const char *')) would lose const qualifier
char *basename(char *);
^
1 error generated.
make: *** [util.o] Error 1'发布于 2019-06-18 06:25:58
我认为您的核心问题是既包含cstring又包含libgen.h。如果你看看这些文件中的basename原型,你会发现它们是不同的。如果你是在linux上构建这篇文章,你会在libgen.h版本中看到一个很有启发性的评论。
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/basename.html和https://linux.die.net/man/3/basename在这里也很有用。
我建议移除#include <libgen.h>,然后重试。
https://stackoverflow.com/questions/56639334
复制相似问题