这是一个c ++函数头文件。它会产生大量随机错误。我知道这很明显,但我以前从未制作过没有课程的头文件。它没有链接cpp文件。
#include <vector>
#include <sstream>
#include <string>
#ifndef SPLIT_H
#define SPLIT_H
void std::vector<std::string> &split(const std::string &s, char delim, std::vector<std::string> &elems);
void std::vector<std::string> split(const std::string &s, char delim);
#endif
void std::vector<std::string> &split(const std::string &s, char delim, std::vector<std::string> &elems) {
std::stringstream ss(s);
std::string item;
while(std::getline(ss, item, delim)) {
elems.push_back(item);
}
return elems;
}
void std::vector<std::string> split(const std::string &s, char delim) {
std::vector<std::string> elems;
return split(s, delim, elems);
}
答案 0 :(得分:4)
您似乎正在返回两个值,void
和vector<std::string>
。
尝试删除函数开头的void
。
答案 1 :(得分:3)
除了@ Default(正确且有效)观察之外,如果您要将这些函数定义放在标题中,您几乎肯定要标记它们inline
。否则,当/如果您将标头包含在多个源文件中并尝试将它们链接在一起时,您将违反一个定义规则。您的链接器可能允许它,但肯定无法保证。 @你的建议是明显的选择:只需将类定义放在标题中,然后将函数定义放在自己的源文件中。
答案 2 :(得分:1)
void std::vector<std::string> &
错了。您的意思是const std::vector<std::string> &
还是只是std::vector<std::string> &
?