Что не так с этим заголовочным файлом - PullRequest
0 голосов
/ 08 ноября 2010

Это заголовочный файл функции 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 ]

4 голосов
/ 08 ноября 2010

Кажется, вы возвращаете два значения, void и vector<std::string>.Попробуйте убрать void в начале функции.

3 голосов
/ 08 ноября 2010

Помимо наблюдения @ Default (правильного и действительного), если вы собираетесь поместить эти определения функций в заголовок, вы почти наверняка захотите пометить их inline. В противном случае, если / если вы включите заголовок в более чем один исходный файл и попытаетесь связать их вместе, вы нарушите правило одного определения. Возможно, ваш компоновщик это допустит, но гарантии, конечно, нет. @ Ваш совет - очевидная альтернатива: просто поместите определение класса в заголовок и поместите определения функций в собственный исходный файл.

1 голос
/ 08 ноября 2010
  1. void std::vector<std::string> & неверно. Вы имели в виду const std::vector<std::string> & или просто std::vector<std::string> &?
  2. Если вы включите этот заголовок в более чем 1 исходный файл, вы можете получить ошибки компоновщика о переопределении символов. Вы должны либо определить функции в исходных файлах, либо сделать их встроенными.
...