1

unsigned char のベクトルへのポインターを渡す関数があります。

関数内の値の 1 つを取得する方法を教えてください。

double CApp::GetCost(unsigned char *uBytes)
{
   unsigned char iHP;
   iHP=uBytes[49]; //this does not work
}

編集: 申し訳ありませんが、最初はコードを簡素化する必要があると考えていましたが、やりすぎるとうまくいかない可能性があると思います。これが実際の宣言です。

// ---------------------------------------
struct ByteFeature
{
    unsigned char Features[52];
};

class clsByteFeatures : public CBaseStructure
{
private:
   vector<ByteFeature> m_content;

protected:
   virtual void ProcessTxtLine(string line);

public:
   vector<ByteFeature> &Content();
   void Add(ByteFeature &bf);
};

vector<ByteFeature> &clsByteFeatures::Content()
{
   return m_content;
}

そして、これが私がそれを使用する方法です:

dblTargetCost  = GetCost(m_ByteFeatures.Content()[iUnitID].Features);

別の質問: このように単純にベクトルを渡すのは良くないでしょうか?

double CApp::GetCost(vector<unsigned char> &uBytes)
{
  //...
}
4

1 に答える 1

3
Would it be bad to simply pass the vector like this?
double CApp::GetCost(vector<unsigned char> &uBytes)

参照によって渡す方が良い方法ではありません。ただし、変更したくない場合は、const 修飾子を追加することをお勧めuBytesします。

double CApp::GetCost(const vector<unsigned char> &uBytes)
{
   try
   {
     unsigned char iHP = uBytes.at(49);
     //... 
   }
   catch(std::exception& e)
   {
     // process e
   }
   //...
}

編集:

GetCost新しい投稿の後、 m_content の要素への参照を返し、関数への参照を渡すだけでよいと思います

ByteFeature& clsByteFeatures::operator[](int i) { return m_content.at(i); }


double GetCost(const ByteFeature& bf)
{
    std::cout << bf.Features[49]; << std::endl;
    return 0.0;
}

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

GetCost(m_ByteFeatures[iUnitID]); 
于 2013-01-19T08:33:20.617 に答える