因此,当我运行下面编写的程序时,打印出来的是
What is passed in 4 7
What is inside -1138187264 32566
-1138187264 + 32566 = -1138154698
1
0
我需要它来保持4和7而不是它当前拥有的垃圾数。我不认为我错误地传递了我的价值观。我试图取消引用它们,但这也没有用。我只想让我的班级计算器保存2个int数字。但由于某种原因,当我传入数字时,它无法识别它们?我不太确定这里发生了什么。
这是我的主要课程
#include <stdlib.h>
#include <iostream>
#include "Calculator.h"
#include "Calculator.cpp"
using namespace std;
class Arithmetic {
private:
int intData;
public:
Arithmetic() {
intData = 0;
}
Arithmetic(int i) {
intData = i;
}
void intOperations(Arithmetic obj) {
cout << "What is passed in " << intData << " " << obj.intData << endl;
Calculator<int> cint(intData, obj.intData);
cout << "What is inside " << cint.getValue1() << " " << cint.getValue2() << endl;
printOperations(cint);
}
};
int main(){
// Create 1st object
int int1 = 4;
Arithmetic arith1(int1);
// Create 2nd object
int int2 = 7;
Arithmetic arith2(int2);
arith1.intOperations(arith2);
}
这是我的calc.h标题
#ifndef CALCULATOR_H
#define CALCULATOR_H
template <class T>
class Calculator {
private:
T value1;
T value2;
public:
Calculator();
Calculator(T value1, T value2);
T getValue1();
T getValue2();
T getSum();
int getLogicalAND();
bool isGreater();
};
#endif
这是我的calc.cpp类
#include "calc.h"
template <class T>
Calculator<T>::Calculator(){
value1 = T();
value2 = T();
}
template <class T>
Calculator<T>::Calculator(T value1, T value2) {
value1 = value1;
value2 = value2;
}
template <class T>
T Calculator<T>::getValue1() {
return value1;
}
template <class T>
T Calculator<T>::getValue2() {
return value2;
}
答案 0 :(得分:3)
当你写:
template <class T>
Calculator<T>::Calculator(T value1, T value2) {
value1 = value1;
value2 = value2;
}
你正在混合函数参数和类属性....在编译器优化之后(因为当你写value1 = value1;
....你实际上什么都没做...),你得到的东西相当于:
template <class T>
Calculator<T>::Calculator(T value1, T value2) {
}
所以value1
和value2
未初始化......这是垃圾。
你需要这样做:
template <class T>
Calculator<T>::Calculator(T value1, T value2) {
this->value1 = value1;
this->value2 = value2;
}
更好的是,使用初始化列表:
template <class T>
Calculator<T>::Calculator(T value1, T value2) :
value1(value1),
value2(value2)
{
}
答案 1 :(得分:1)
此:
template <class T>
Calculator<T>::Calculator(T value1, T value2) {
value1 = value1;
value2 = value2;
}
没有做你认为的事情。你至少应该写:
this->value1 = value1;
或甚至更好地为参数命名。