为什么我的编译器找不到我的函数?

时间:2012-06-21 16:30:53

标签: c++ arrays

我正在学习如何使用C / C ++并且正在尝试编写一个程序,其中“otherPerson”(名字,姓氏)继承自“person”(名字)。我坚持使用compareTo函数。它应该按名字的字母顺序对人的指针数组进行排序。 (不确定我是否正确表达了这个想法)。最终目标是打印数组的已排序内容。

我一直在:

  

错误LNK2019:未解析的外部符号“void __cdecl compareTo(class person * * const,int)”(?compareTo @@ YAXQAPAVperson @@ H @ Z)在函数_main中引用   1> c:\ users \ laur \ documents \ visual studio 2012 \ Projects \ Project1 \ Debug \ Project1.exe:致命错误LNK1120:1个未解析的外部

当我尝试构建时。我已经浏览了互联网以获取更多信息,但我很确定我的包含语句是正确的。该函数旨在作为成员函数。

Test.cpp的:

#include "stdio.h"
   #include "otherPerson.h"
   #include<iostream>
   #include <string>
   using namespace std;
      void compareTo(person *array[7], int );
       int main(){
           int length = 7;
           person* epicJourney[6];
          //fill array
           compareTo(epicJourney, length);

person.h:

#include <stdio.h>
#include <string>
using namespace std;

class person {
    protected:
        string firstName;
    public: 
        person(string firstName);
        virtual void setFirstName(string firstName);
        virtual string getFirstName();  
        virtual void compareTo (person *array[7], int length);
        virtual string toString();
};

person.cpp:

#include "person.h"
#include <string>
using namespace std;
person::person(string firstName){
    this->firstName = firstName;
}

void person::setFirstName(string aName){
    firstName =aName;
}

string person::getFirstName(){
    return ((*this).firstName);
}

string person::toString(){
    return (this->firstName);
}

void person::compareTo(person *array[], int length){
    int i;
    int j;

    person *current;

    for (i=1; i<length; i++){
        current = array[i];
        for (j=i; j>=1 && (current < array[j-1]); j--){
            array[j] = array[j-1];
            array[j-1] = current;
        }

    }
}

3 个答案:

答案 0 :(得分:2)

您的原型是void compareTo(... );,但您的实际实施是void person::compareTo(...)。你必须下定决心:你想要一个班级成员的职能吗?

答案 1 :(得分:1)

您缺少此独立功能的定义:

void compareTo(person *array[7], int ); 

您需要在程序中的某处添加定义。

答案 2 :(得分:0)

定义一个函数person::compareTo,它与Test.cpp中声明的函数compareTo 不同(因为前者是person的成员函数,而后者是一个全球性的功能)。