1

C/C++ の使い方を学んでいて、"otherPerson" (名、姓) が "person" (名) から継承するプログラムを作成しようとしています。私は人のcompareTo関数にこだわっています。person へのポインターの配列を名前のアルファベット順にソートすることになっています。(その考えを正しく表現したかどうかはわかりません)。最終的な目標は、配列のソートされた内容を出力することです。

私は得続けます:

エラー 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;
        }

    }
}
4

3 に答える 3

2

プロトタイプは ですvoid compareTo(... );が、実際の実装はvoid person::compareTo(...)です。クラスメンバー関数が必要ですか?

于 2012-06-21T16:35:29.137 に答える
1

このスタンドアロン関数の定義がありません:

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

プログラムのどこかに定義を追加する必要があります。

于 2012-06-21T16:35:57.540 に答える
0

Test.cpp で宣言された関数person::compareToとは異なるfunction を定義します(前者は のメンバー関数であり、後者はグローバル関数であるため)。compareToperson

于 2012-06-21T16:36:15.510 に答える