C ++ 11未定义的函数引用

问题描述 投票:0回答:2

我无法找到解决问题的方法,我认为它与重载函数有关,但我似乎无法弄清楚如何解决它。

这是我的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;
}

这是我的function.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

谢谢!

c++ function c++11 compiler-errors
2个回答
5
投票

CC++区分大小写:

定义:

int Countletter(string sentence, char letter) {

用法:

times = CountLetter(sent, let);

面对链接器错误时,怀疑拼写错误是其中一个场景。

你有他们微妙的区别吗?

Countletter
CountLetter

1
投票

你的CountLetter功能在function.h所以你的#include "CountLetter.h"变成#include "function.h"

© www.soinside.com 2019 - 2024. All rights reserved.