Visual C++ Express 2010 のヘッダー ファイルを次に示します (最後の行に注意してください)。
/* custom class header to communicate with LynxMotion robot arm */
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;
std::vector<int> *currentPosition;
};
この関数を使用してベクトルに値を代入しようとしました。
void LynxRobotArm::setCurrentPosition(int channel, int position)
{
currentPosition[channel] = position;
}
コンパイラからエラー C2679 が返されます。
binary '=' : no operator found which takes a right-hand operand of type 'int' (or there is no acceptable conversion)
MSDNを調べたところ、次のように書かれています。
演算子を使用するには、指定された型に対して演算子をオーバーロードするか、演算子が定義されている型への変換を定義する必要があります。
使ってみcurrentPosition.at(channel) = position
ましたが変わりませんでした。
私は立ち往生しています...ポインターにまったく慣れていないためstd::vector<int> currentPosition;
、代わりに使用するとstd::vector<int> *currentPosition;
コンパイルされないことに注意してください。
セット関数はどのように機能する必要がありますか? (後でゲッターを試します..)