这个头文件有什么问题

时间:2010-11-08 19:58:37

标签: c++ function header-files

这是一个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);
}

3 个答案:

答案 0 :(得分:4)

您似乎正在返回两个值,voidvector<std::string>。 尝试删除函数开头的void

答案 1 :(得分:3)

除了@ Default(正确且有效)观察之外,如果您要将这些函数定义放在标题中,您几乎肯定要标记它们inline。否则,当/如果您将标头包含在多个源文件中并尝试将它们链接在一起时,您将违反一个定义规则。您的链接器可能允许它,但肯定无法保证。 @你的建议是明显的选择:只需将类定义放在标题中,然后将函数定义放在自己的源文件中。

答案 2 :(得分:1)

  1. void std::vector<std::string> &错了。您的意思是const std::vector<std::string> &还是只是std::vector<std::string> &
  2. 如果在多个源文件中包含此标头,则可能会出现有关重新定义符号的链接器错误。您应该在源文件中定义函数或将它们内联。