【问题标题】:C++11 Undefined reference to functionC++11 未定义的函数引用
【发布时间】:2018-03-02 07:59:26
【问题描述】:

我无法找到解决问题的方法,我认为这与函数重载有关,但我似乎不知道如何解决。

这是我的function.cpp

#include "CountLetter.h"
int Countletter(string sentence, char letter) {
    int size = sentence.length();
    int toReturn = 0;

    for (int i = 0; i<= size; ++i) {
            if (sentence[i] == letter) {
                    toReturn++;
            }
    }
    return toReturn;
}

这是我的函数.h

#ifndef FN_H
#define FN_H
#include <iostream>

using namespace std;
int CountLetter(string sentence, char letter);

#endif

我的 main.cpp

#include "CountLetter.h"

int main() {
    string sent = "";
    char let = ' ';
    int times = 0;

    cout << "Enter a sentence.\n";
    getline(cin, sent);
    cout << "Enter a letter.\n";
    cin >> let;
    times = CountLetter(sent, let);
    cout << "The letter " << let << " occurred " << times << " time(s).\n";

    return 0;
}

最后是我的makefile

lab16: lab16.o CountLetter.o
    g++ -std=c++11 -o lab16 lab16.o CountLetter.o
lab16.o: lab16.cpp
    g++ -std=c++11 -o lab16.o -c lab16.cpp
CountLetter.o: CountLetter.h CountLetter.cpp
    g++ -std=c++11 -o CountLetter.o -c CountLetter.cpp

还有我的错误

lab16.o: In function `main':
lab16.cpp:(.text+0xb4): undefined reference to 
`CountLetter(std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> >, char)'
collect2: error: ld returned 1 exit status
Makefile:2: recipe for target 'lab16' failed
make: *** [lab16] Error 1

谢谢!

【问题讨论】:

  • 您的文件名称不一致。 lab16.cppCountLetter.h 是什么?
  • CountLetter.o: CountLetter.h(应该只列出标题而不是标题和来源)。 function.h 发生了什么(失踪??)
  • 您的for 循环条件i &lt;= size 越界导致未定义行为。应该是i &lt; size

标签: c++ function c++11 compiler-errors


【解决方案1】:

CC++ 区分大小写:

定义:

int Countletter(string sentence, char letter) {

用法:

times = CountLetter(sent, let);

当遇到链接器错误时,怀疑拼写错误是其中一种情况。

你发现它们的细微差别了吗?

Countletter
CountLetter

【讨论】:

    【解决方案2】:

    您的CountLetter 函数在function.h 中,所以 将您的 #include "CountLetter.h" 更改为 #include "function.h"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-05-03
      相关资源
      最近更新 更多