标头和 CPP 文件

headers and cpp files

本文关键字:文件 CPP      更新时间:2023-10-16

我得到了这个超级简单的代码,我正在尝试在Linux下编译(第一次在linux下工作(我以前用 c++ 编程,我理解头和 cpp 文件的概念......

句子.h

#ifndef SENTENCE_H_
#define SENTENCE_H_
std::vector<std::string> split(char sentence[]);
void printWords(std::vector<std::string> words);
#endif

句子.cpp

#include "../include/Sentence.h"
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
std::vector<std::string> split(char sentence[]) {
    string str(sentence);
    string buf; // Have a buffer string
    stringstream ss(str); // Insert the string into a stream
    vector<string> tokens; // Create vector to hold our words
    while (ss >> buf)
        tokens.push_back(buf);
    return tokens;
}
void printWords(std::vector<std::string> words) {
    for (size_t i = 0; i < words.size(); ++i)
           std::cout << words[i] << endl;
}

而且我遇到了那几个错误,我不知道为什么......

daniel@daniel-ubuntu-server:~/workspace/HW1$ make
g++ -g -Wall -Weffc++ -c -Linclude -o bin/Sentence.o src/Sentence.cpp
In file included from src/Sentence.cpp:1:0:
src/../include/Sentence.h:4:6: error: ‘vector’ in namespace ‘std’ does not name a template type
 std::vector<std::string> split(char sentence[]);
      ^
src/../include/Sentence.h:5:22: error: variable or field ‘printWords’ declared void
 void printWords(std::vector<std::string> words);
                      ^
src/../include/Sentence.h:5:17: error: ‘vector’ is not a member of ‘std’
 void printWords(std::vector<std::string> words);
                 ^
src/../include/Sentence.h:5:29: error: ‘string’ is not a member of ‘std’
 void printWords(std::vector<std::string> words);
                             ^
src/../include/Sentence.h:5:42: error: ‘words’ was not declared in this scope
 void printWords(std::vector<std::string> words);
                                          ^
makefile:10: recipe for target 'bin/Sentence.o' failed
make: *** [bin/Sentence.o] Error 1

你的标头使用 std::vector 类,但向量类代码从未包含在其中。将#include <vector>添加到头文件,以便在Sentence.h的其余部分之前加载类。

这也将有助于其他可能使用 Sentece.h 的文件,因为它们不必自己包含向量类。

Sentence.h使用std::vector但不包括<vector>标头。与std::string的情况相同.