gpt4 book ai didi

c++ - 在 MANAGED C++ 项目中重载 C++ 的操作

转载 作者:行者123 更新时间:2023-11-28 01:06:29 28 4
gpt4 key购买 nike

我有一个与 C# GUI 对话的托管 C++ dll。它工作正常,通信通过包装器进行,一切正常。 dll 中的代码全部用 C++ 编写,但我无法让运算符重载工作,我打算用它来对 vector 进行排序。我不知道我的代码是否有错误,或者它是否不起作用,因为它在托管 C++ 项目中。

我试过 sort(it, it) 但它不起作用,因为运算符重载不起作用。我也尝试过使用比较排序(它,它,less_than_second),但它也不起作用,因为我得到了错误。我尝试了很多东西,但遇到了如下错误:- 排序只需要 2 个参数- 小于_second_ 未声明的标识符

运算符重载不会产生错误。

这是我想重载运算符的移动类的代码<:

public class Move
{

public:
friend bool operator < (const Move &firstMove, const Move &secondMove)
{
return (firstMove.score < secondMove.score);
}
bool operator<(const Move& b) {
return this->score < b.score;
}
int positionFrom;
int positionTo;
int tileFrom;
int score;
bool isJumpMove;
Move(void);
Move(int to);
Move(int from, int to, bool isJumpMove);
Move(int from, int to, int tileFrom, bool isJumpMove);


};

Testcode in a function of another class.

Move* move1 = new Move();
move1->score = 2;
Move* move2 = new Move();
move2->score = 1;
Move* move3 = new Move();
move3->score = 0;
Move* move4 = new Move();
move4->score = 4;

if(move1 < move2)
{
Console::WriteLine("2 is bigger than 1");
}
else
{
Console::WriteLine("1 is bigger than 2");
}

vector<Move*> vectorList;
vectorList.push_back(move1);
vectorList.push_back(move2);
vectorList.push_back(move3);
vectorList.push_back(move4);

for (int i=0; i<vectorList.size(); i++) {
Console::WriteLine(vectorList[i]->score);
}
sort (vectorList.begin(), vectorList.end() );
sort (vectorList.begin(), vectorList.end(), less_than_second);
for (int i=0; i<vectorList.size(); i++) {
Console::WriteLine(vectorList[i]->score);
}
the compare function ( it's in the cpp file of another class )

inline bool less_than_second( Move &move1,Move &move2){
return (move1.score < move2.score);
}

最佳答案

您的 vector 元素是Move*(一个指针)。这是一个内置类型,您不能重新定义它的运算符。 less_than_second 的签名错误,它不接受指针。

关于c++ - 在 MANAGED C++ 项目中重载 C++ 的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5819995/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com