簡體   English   中英

這個頭文件怎么了

[英]What's wrong with this header file

這是一個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);
}

似乎您正在返回兩個值, voidvector<std::string> 嘗試刪除函數開頭的void

除了@Default的(正確和有效)觀察之外,如果要將這些函數定義放在標頭中,則幾乎可以肯定地希望將它們標記為inline 否則,如果/如果您將標頭包含在多個源文件中,並嘗試將它們鏈接在一起,則會違反一個定義規則。 您的鏈接器可能會允許它,但是當然不能保證。 @You的建議是顯而易見的替代方案:只需將類定義放在標頭中,然后將函數定義放在它們自己的源文件中。

  1. void std::vector<std::string> &是錯誤的。 您是說const std::vector<std::string> &還是只是std::vector<std::string> &
  2. 如果將此頭文件包含在多個源文件中,則可能會收到有關重新定義符號的鏈接器錯誤。 您應該在源文件中定義功能或將其內聯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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