3

これは、Visual C ++Express2010で作業しているクラスのヘッダーです。

/* custom class header to communicate with LynxMotion robot arm */

#include <vector>
using namespace System;
using namespace System::IO::Ports;

public ref class LynxRobotArm
{
public:
    LynxRobotArm();
    ~LynxRobotArm();
    void connectToSerialPort(String^ portName, int baudRate);
    void disconnectFromSerialPort();
    void setCurrentPosition(int channel, int position);
    int getCurrentPosition(int channel);
    void moveToPosition(int channel, int position);

private:
    void initConnection();
    SerialPort^ serialPort;
    array<String^> ^serialPortNames;
    String^ portName;
    int baudRate;
    vector<int> currentPosition;
};

int currentPosition最後の行をに変更するまで、すべてが正常に機能しましたvector<int> currentPosition。今すぐコンパイル/デバッグしようとすると、次のエラーメッセージが表示されます。

error C2143: syntax error : missing ';' before '<'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2238: unexpected token(s) preceding ';'

これらのエラーコードの詳細についてMSDNを確認しましたが、コードの何が問題になっているのかわかりません。何か案は?

4

2 に答える 2

7

vectorstdは名前空間内で定義されたテンプレートであるため、std::vector<int>の代わりに記述する必要がありvector<int>ます。

または、このファイルの先頭に書き込むこともできますが、クラスの名前の一部があいまいになる可能性があるため、これは悪い習慣using namespace std;と見なされることに注意してください。

于 2012-05-24T20:12:39.893 に答える
0

ベクトルを使用しています。ベクトルは名前空間stdに含まれています。名前空間は、変数/クラスの通常のスコープをカプセル化します。スコープをなんらかの方法で解決せずに、名前空間内の要素にアクセスすることはできません。これを行うには、主に3つの方法があります。

#include <vector>
using namespace std; 

通常、これは使用しません。名前空間stdに含まれるすべての関数/クラスを表示できるため、問題が発生します。これにより、名前の衝突が発生する可能性があります。

次の方法は次のとおりです。

#include <vector>
using std::vector;

この方法は少し良いです。これにより、ファイル内のすべてのもの、またはそのファイルを含むすべてのファイルにベクトルが表示されます。とにかく.cppファイルを含めるべきではないので、.cppファイルにはおそらく完全に無害です。そして、あなたはあなたがどんなシンボルであるかを知っているべきです。.h / .hppファイルのシナリオでは、これを使用したくない場合があります。.hppファイルにソースコードが含まれているファイルには、名前の定義としてクラスベクトルが表示されます。これは、コードのユーザーにとっては悪いことかもしれません。なぜなら、ユーザーはそのシンボルが定義されることを期待していない可能性があるからです。hppファイルの場合は、常に次のものを使用する必要があります。

#include <vector>

class myClass{
private:
      std::vector myVector;
};

このように名前空間を使用すると、シンボルが使用されている場所にのみ正確に表示され、他の場所には表示されないことが保証されます。これは、.hppファイルで使用する唯一の方法です。

于 2016-06-03T17:34:09.297 に答える