簡體   English   中英

未定義模板的隱式實例化“std::__1::basic_istringstream <char, std::__1::char_traits<char> , std::__1:: 分配器<char> >"</char></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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM