2011-08-04 49 views
8

異なるcppファイルでクラスを実装しようとしています。メンバー関数が独立していれば、C++で行うのが正当なことだと私は理解しています。しかし、メンバ関数の1つは、この場合のように他のメンバ関数を使用する:function1.cpp function2.cppで複数のファイルでのクラスの実装

#include "myclass.h" 
void myclass::function1() 
{ 
    function2(); 
} 

#include "myclass.h" 
void myclass::function2() 
{ 
.... 
} 

Iは未定義参照のエラーを取得します機能2へ。このポインタを追加しても機能しません。 function1.cppで何らかの方法で宣言する必要はありますか?ありがとう〜

ヘッダーファイルには、両方の関数の宣言が含まれています。これはfunction1とfunction2が同じファイルにあるときに機能しますが、分離するときは機能しません。私はまた、私は両方のプロジェクトにcppを追加したと信じています。私はQt creater btwを使用しています。

+0

myclass.hにfunction1()とfunction2()の両方を宣言しましたか? – nobody

+0

ヘッダーファイル(myclass.h)の両方の関数の関数宣言が必要です。 – Sujoy

+0

myclass.hファイルを追加できますか?おそらくクラス宣言に何らかのエラーがあります。そのような状況のため、ここにエラーはありません。 – Olympian

答えて

11

myclass.hには、メンバー関数の宣言を含むクラスの定義が含まれている限り、上手くいくはずです。例:

//MyClass.h 
#ifndef XXXXXXXX 
#define XXXXXXXX 
class MyClass 
{ 
    public: 
    void f1(); 
    void f2(); 
}; 
#endif 

//MyClass1.cpp 
#include "MyClass.h" 
void MyClass::f1() 
{ 
}; 

//MyClass2.cpp 
#include "MyClass.h" 
void MyClass::f2() 
{ 
    f1(); //OK 
} 
+0

こんにちは。私はこれが私がしたことだと信じています。まだコンパイルされません。 2つの関数が同じファイル内にある場合は正常に動作します。私はQtで作業しており、両方のファイルがプロジェクトにリストされています。 – Bill

1

これは動作するはずです。リンカーエラーが発生した場合は、両方のcppファイルをコンパイルしてください。これが、おそらくエラーの原因になります。

0

すべてが私にとってはうれしいようです。ビルドプロセスに何らかの問題がある可能性があります。 2つの.cppファイルを(-cオプションを使用して)オブジェクトファイルにコンパイルし、次の段階でそれらをリンクする必要があります。

関連する問題