C++,对函数的未定义引用,尽管包含它的标头
C++, undefined reference to a function that despite including it's header
我对c++很陌生,正在读一本叫做《加速c++》的书。在其中一章中,你需要编写一个程序,给定一串文本,告诉你每个单词出现在哪一行。为了分解字符串中的所有单词,我使用了一个来自不同源文件的名为"split"的函数,但包含了它的头文件,所以我可以使用它。但这并没有奏效。对于我的生活,我不明白为什么链接器告诉我"对'split(std::string const&)'的未定义引用
split.cpp:
#include <string>
#include <cctype>
#include <vector>
#include "split.h"
using namespace std;
bool space(char c) {
return isspace(c);
}
bool not_space(char c) {
return !isspace(c);
}
vector<string> split(const string& s) {
vector<string> ret;
string::const_iterator i = s.begin();
while (i != s.end()) {
i = find_if(it, s.end(), not_space);
string::const_iterator j = i;
j = find_if(j, s.end(), space);
if (i != s.end())
ret.push_back(string(i, j));
i = j;
}
return ret;
}
split.h:
#ifndef GUARD_split_h
#define GUARD_split_h
#include <string>
#include <vector>
bool space(char);
bool not_space(char);
std::vector<std::string> split(const std::string&);
#endif
Word_Counter.cpp:
#include <iostream>
#include <vector>
#include <string>
#include <map>
#include "split.h"
using namespace std;
map<string, vector<int> > xref(istream& in, vector<string>
find_words(const string&) = split) {
string line;
int line_number = 0;
map<string, vector<int> > ret;
while (getline(in, line)) {
++line_number;
vector<string> words = find_words(line);
for (vector<string>::const_iterator it = words.begin();
it != words.end(); it++)
ret[*it].push_back(line_number);
}
return ret;
}
int main() {
map<string, vector<int> > ret = xref(cin);
for(map<string, vector<int> >::const_iterator it = ret.begin();
it != ret.end(); it++) {
cout << it->first << "occurs on line(s): ";
vector<int>::const_iterator line_it = it->second.begin();
cout << *line_it;
line_it++;
while(line_it != it->second.end()) {
cout << ", " << *line_it;
line_it++;
}
cout << endl;
}
return 0;
}
我一直有一个艰难的时间与标题一般最近。任何帮助都非常感谢!
如果您将源代码分成几个文件,则需要让编译器知道所有这些文件。最简单的方法是在命令行中列出所有 .cpp
文件(不是.h
文件!):
g++ Word_Counter.cpp split.cpp -o Word_Counter
相关文章:
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 在编译它时显示未定义的引用
- 为什么更改包含 psapi.h 的顺序会产生编译错误?(标识符 BOOL 未定义)
- 'dlopen''ing 包含符号的 .so 会导致未定义的符号
- 递减 std::vector::begin 是否未定义,即使它从未被使用过?
- 为什么T是未定义的?我正在尝试实现一个用于双链表的节点类,它不喜欢我使用友元运算符后的T
- 在Qt应用程序中包含Python.h会导致对Qt函数的未定义引用
- 链接器错误:在包含 .so lib 后未定义对 xxx 的引用
- 我对C++程序有一个未定义的参考,不知道如何处理它
- 我正在尝试在我的类中创建一个静态成员,但编译器警告我它是未定义的
- 未定义的引用,即使库正在链接并且它包含正确的符号
- 编译 Rust 静态库并在 C++ 中使用它:未定义的引用
- C++ 包含中的"未定义"模块关键字
- 对象文件中的未定义引用 - 如何查找哪个库包含它
- C++类方法包含对静态变量的未定义引用
- Android Native:CMake 链接错误:未定义对 GL 函数的引用 - 即使包含并链接了 EGL 和 GLESv3
- 如何修复生成文件以正确包含 -lcrypto 以避免链接器错误:未定义对"EVP_CIPHER_CTX_new"的引用
- 当包含它的对象调用其析构函数时,unique_ptr是否未分配
- 即使包含 process.h,_beginthreadex 和 _endthreadex 也是未定义的
- C++,对函数的未定义引用,尽管包含它的标头