1

C++ で関数を呼び出そうとしていますが、C と同じだと思っていましたが、C プログラムを C++ に変換しようとすると、関数が宣言されていないというエラーが発生しました。

これが私のクラスです:

class contacts
 {
  private:;
          char *First_Name;
          char *Last_Name;
          char *home;
          char *cell;
  public:;
  //constructor
         contacts()
         {
         }  
//Function declaration     
void readfile (contacts*friends ,int* counter, int i,char buffer[],FILE*read,char user_entry3[]);

  };

これが私のメニュー機能のスニペットです:

 if(user_entry1==1)
  {
    printf("Please enter a file name");
    scanf("%s",user_entry3); 
    read=fopen(user_entry3,"r+");

   //This is the "undeclared" function
   readfile(friends ,counter,i,buffer,read,user_entry3);
   }else;

私は明らかに何か間違ったことをしていますが、コンパイルしようとするたびに、readfile undeclared(first use this function)何が間違っていますか?

4

4 に答える 4

2

contactsクラスのオブジェクトを作成してから、readfileそのオブジェクトを呼び出す必要があります。このように: contacts c; c.readfile();.

于 2012-11-21T04:43:02.787 に答える
0

クラス内からの「メニュー」機能contactsですか?あなたが設計した方法では、クラスのインスタンスでのみ呼び出すことができます。正確に何を意味するかに基づいたオプションがありますreadfilecontacts

関数は1つの連絡先だけでなく、すべての連絡先を読み取ると推測しています。つまり、静的関数にすることができます

static void readfile(... ;

そして、次のように呼び出します

contacts::readfile(...;

あるいは、クラスの内部に直接アクセスする必要がない場合は、クラスの外部で宣言するだけで(通常の C 関数と同様に、フリー関数として)、現在行っているのとまったく同じように使用できます。これは実際、コンパイラがコードに遭遇したときに探しているものです。

また、名前を変更することをお勧めしますclass contacts->class contactオブジェクトはそれぞれ 1 人の連絡先情報しか保持していないようです。

于 2012-11-21T04:43:20.530 に答える
0

STL ベクターを使用するようにリファクタリングすることをお勧めします。

#include <vector>
#include <ReaderUtil>

using namespace std;

vector< contact > myContactCollection;
myContactCollection.push_back( Contact("Bob",....) );
myContactCollection.push_back( Contact("Jack",....) );
myContactCollection.push_back( Contact("Jill",....) );

または...

myContactCollection = ReaderClass::csvparser(myFile);

どこ

ReaderClass::csvparser(std::string myFile) returns vector<Contact>
于 2012-11-21T05:01:40.683 に答える