[英]Implicit instantiation of undefined template 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >'
[英]implicit instantiation of undefined template "std::__1::basic_istringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >"
我正在學習 C++ 並遵循教程,但在構建起始代碼中的代碼時遇到了問題。
這是引發此錯誤的源代碼文件。
#include "linux_parser.h"
#include <dirent.h>
#include <unistd.h>
#include <istream>
#include <string>
#include <vector>
using std::stof;
using std::string;
using std::to_string;
using std::vector;
// DONE: An example of how to read data from the filesystem
string LinuxParser::OperatingSystem() {
string line;
string key;
string value;
std::ifstream filestream(kOSPath);
if (filestream.is_open()) {
while (std::getline(filestream, line)) {
std::replace(line.begin(), line.end(), ' ', '_');
std::replace(line.begin(), line.end(), '=', ' ');
std::replace(line.begin(), line.end(), '"', ' ');
std::istringstream linestream(line);
while (linestream >> key >> value) {
if (key == "PRETTY_NAME") {
std::replace(value.begin(), value.end(), '_', ' ');
return value;
}
}
}
}
return value;
}
以下是我在 mac Catalina 上本地運行make build
時拋出的錯誤。
Scanning dependencies of target monitor
[ 12%] Building CXX object CMakeFiles/monitor.dir/src/format.cpp.o
[ 25%] Building CXX object CMakeFiles/monitor.dir/src/linux_parser.cpp.o
/Users/Documents/github/cpp/src/linux_parser.cpp:25:26: error: implicit instantiation of undefined template
'std::__1::basic_istringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >'
std::istringstream linestream(line);
^
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/iosfwd:133:32: note: template is declared here
class _LIBCPP_TEMPLATE_VIS basic_istringstream;
^
/Users/Documents/github/cpp/src/linux_parser.cpp:44:24: error: implicit instantiation of undefined template
'std::__1::basic_istringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >'
std::istringstream linestream(line);
^
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/iosfwd:133:32: note: template is declared here
class _LIBCPP_TEMPLATE_VIS basic_istringstream;
^
2 errors generated.
make[3]: *** [CMakeFiles/monitor.dir/src/linux_parser.cpp.o] Error 1
make[2]: *** [CMakeFiles/monitor.dir/all] Error 2
make[1]: *** [all] Error 2
make: *** [build] Error 2
您需要#include <sstream>
才能使用std::istringstream
。
我在使用std::stringstream class 時遇到了完全相同的錯誤。添加此 header 文件:
#include <sstream>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.