0

pos.h pos.cpp と main.cpp の 3 つのファイルがあります。たとえば、メイン クラスで pos.cpp から関数を呼び出そうとしています。

pos.h ファイル

class pos {
   public:
   pos(); //defualut constructor 
int open_port();
}

pos.cpp

#include "pos.h"
int Open_port()    {
//do stuff here
    return 0;
    }

クラス main.cpp

#include "pos.h"
int main(int argc , char** argv) {
pos pos1;
pos1::Open_port();
}

問題は、pos1 が次のようにコンパイルしているクラスまたは名前空間ではないことを常に取得していることです g++ mainpos.cpp pos.cpp pos.h -o position -lpthread

4

3 に答える 3

2

コードにいくつかの問題があるようです:

int open_port();

のメンバー関数ですpos。ただし、定義すると、::演算子を使用しておらず、関数名が変更されます。

試す:

 int pos::open_port()
 {      ///^^pay attention to typos
     //do stuff here
     return 0;
 }

それから中main。できるよ:

 pos pos1;
 pos1.open_port();

クラスのメンバーではないを本当に意味する場合はOpen_port()、関数宣言を適切なヘッダー ファイルに追加して適切に使用する必要がありますが、それは別の問題です。

于 2013-06-18T19:40:33.803 に答える
0

いくつかの問題がありますが、そのほとんどは基本的な構文に関連しています。

  1. 大文字と小文字が重要です。open_portOpen_portは 2 つの完全に異なるものです

  2. クラスのメソッドを実際に定義しているわけではなくpos、新しい関数を作成しています

    int Open_port()    {
    

    する必要があります

    int pos::open_port()    {
    
  3. 非静的メソッドを静的に呼び出そうとしています。のインスタンスを作成しpos(これは実行済みです)、 を介してpos1呼び出す必要があります。メソッドを宣言しない限り、直接呼び出すことはできません。open_portpos1.open_port()pos::open_portstatic

  4. 最後の問題は、クラスのデフォルト コンストラクターを宣言したが、定義していないことです。のメソッド本体を提供する必要がありますpos::pos()

于 2013-06-18T19:40:06.233 に答える
0

コードには 2 つの問題があります。ファイルではcpp、その関数のスコープを使用する必要があるため、次のものが必要です。

int pos::Open_port()

open_portまた、とOpen_portのスペルと大文字が同じであることを確認する必要があります。

最後に、そのように呼び出したい場合は、クラス def'nopen_portのように関数を宣言する必要があります。static

于 2013-06-18T19:41:40.340 に答える