在方法中使用类的对象作为参数
Using object of class as an parametr in method
>我有类堆栈的方法,它比较了这个类的2个对象:
bool comparison(T &stack) {
if (size == stack.size)
for (int i = 0; i < size; i++) {
if (!this->stackPr[i].comparison(stack.stackPr[i]))
return false;
}
else
return false;
return true;
}
并使用上课时间的方法:
bool comparison(Time &time) {
if ((this->hours == time.hours) && (this->minutes == time.minutes) && (this->seconds == time.seconds))
return true;
return false;
当我尝试在main中使用这个comman时:
bool temp = stack3.comparison(stack4);
MVS 下划线 |stack4| 并向我显示错误:
a reference of type "Time &"(non-const qualified) cannot be initialized with a value of type Stack<Time>
我该如何处理这个问题?感谢您的回答:)
有类堆栈:
class Stack {
private:
T *stackPr;
int size;
int top;
public:
//----------------CONSTRUCTORS-----------------
Stack(int n) {
if (n > 0)
size = n;
else
size = 10;
stackPr = new T[size];
top = -1;
}
Stack() {
size = 10;
stackPr = new T[size];
top = -1;
}
Stack(Stack &stack) {
stackPr = new T[stack.size];
size = stack.size;
top = stack.top;
for (int i = 0; i < size; i++)
stackPr[i] = stack.stackPr[i];
}
Stack(T *objs, int sizeMass) {
size = sizeMass;
stackPr = new T[size];
for (int i = 0; i < sizeMass; i++) {
this->push(objs[i]);
}
}
//----------------DESTRUCTOR-------------------
~Stack() {
delete[] stackPr;
}
//-----------------METHODS---------------------
//Add element to stack
void push(T &element) {
if (top == size - 1)
cout << "nThere's no more place!!!n";
else {
top++;
stackPr[top] = element;
cout << "nElement was succesfully pushedn";
}
}
//Read + Delete
T pop() {
if (top == -1)
cout << "nStack is emptyn";
else {
T temp = stackPr[top];
stackPr[top] = 0;
top--;
cout << "nElement was succesfully poped and deletedn";
return temp;
}
}
//Read
T popup() {
if (top == -1)
cout << "nStack is emptyn";
else {
cout << "nElement was succesfully poppedn";
return stackPr[top];
}
}
//Comparison of 2 stacks
bool comparison(T &stack) {
if (size == stack.size)
for (int i = 0; i < size; i++) {
if (!this->stackPr[i].comparison(stack.stackPr[i]))
return false;
}
else
return false;
return true;
}
};
试试这个,在你的 Stack 类中
改变:
bool comparison(T &stack) {
为此:
bool comparison(Stack<T> &stack) {
首先,放弃这个comparison
函数,它会阻碍你的代码,改用==
。
其次,在比较函数中使用const Stack<T>
。
最后,使用 auto
推断变量的类型。
下面是一个示例,显示了我刚刚编写的内容的基础知识:
#include <iostream>
using namespace std;
struct Time
{
bool operator==(const Time& time)
{
return true;// adjust it with your own needs.
}
};
template<typename T>
struct Stack
{
T val;
Stack(T& val_): val(val_) {}
bool operator==(const Stack<T>& stack)
{
return this->val == stack.val; // here is your business logic of comparison
}
};
int main()
{
Time t1;
Time t2;
Stack<Time> myStack1(t1);
Stack<Time> myStack2(t2);
auto temp = myStack1 == myStack2;
cout << temp << endl;
return 0;
}
相关文章:
- 将值从指针复制到常量对象参数
- 隐式对象参数和此指针
- 将对象传递给 Java C++与使用 JNI 逐个设置对象参数
- 如何通过对象参数从指针矢量中删除对象和指针
- 是否有一种方法可以根据派生的可能性值范围限制对象参数
- 从从可调用参数创建的线程对象参数移动构造 C++11 线程
- 为什么我不能通过传入的类对象参数杀死 pthread。
- 无法异步启动带有对象参数的函数
- 为什么在 std::transform 中使用函数对象参数失败并且需要 lambda 表达式
- 实例对象如何查看函数的对象参数的私有成员?
- 在没有对象参数编译器错误的情况下调用非静态成员函数
- 具有常数对象参数的类函数
- 模板功能没有对象参数专业
- 为什么不能在对象参数前面使用常量?
- 具有不同签名的函数对象参数的函数
- 调用非静态成员函数,没有对象参数错误
- 如何从 C# 调用具有 void* 回调和对象参数的 C++ Dll 中的函数
- 对函数使用对象参数或不使用参数
- c++错误:调用没有对象参数的非静态成员函数
- c++对象参数:多态性,值语义,对象生命周期