Написание этой программы для класса, который должен иметь возможность создавать 4 объекта класса и использовать функции шаблона для вызова арифметических операций для разных типов данных. Мои ошибки говорят мне, что мои функции Sum, Difference и т. Д. Не являются членами класса шаблона, который я создал.'Sum': не является членом 'Тип <Object>' - C++ templates
Вот мой код Type.h
#ifndef TYPE_H
#define TYPE_H
#include <iostream>
using namespace std;
template <typename Object>
class Type : public Print
{
public:
//Constructor
explicit Type(const Object & initValue = Object()) : storedValue(initValue){}
//Accessor and Mutator for storedValue
const Object & getValue() const;
void setValue(const Object & val);
//Additional Operations
void Sum(const Type<Object> & val);
void Difference(const Type<Object> & val);
void Product(const Type<Object> & val);
void Quotient(const Type<Object> & val);
private:
Object storedValue;
};
template <typename Object>
const Object & Type<Object>::getValue() const
{ return storedValue; }
template <typename Object>
void Type<Object>::setValue(const Object & val)
{ storedValue = val; }
template <typename Object>
void Type<Object>::Sum(const Type<Object> & val)
{
cout << "The sum of " << val << "and " << storedValue << "is " << val += storedValue << endl;
}
template <typename Object>
void Type<Object>::Difference(const Type<Object> & val)
{
cout << "The difference of " << val << "and " << storedValue << "is " << val -= storedValue << endl;
}
template <typename Object>
void Type<Object>::Product(const Type<Object> & val)
{
cout << "The product of " << val << "and " << storedValue << "is " << val *= storedValue << endl;
}
template <typename Object>
void Type<Object>::Quotient(const Type<Object> & val)
{
cout << "The quotient of " << val << "and " << storedValue << "is " << val /= storedValue << endl;
}
class Print
{
public:
void printHello();
};
void Print::printHello()
{
cout << "Hello" << endl;
}
#endif
Вот код для TypeMain.cpp:
#include <iostream>
#include "Type.h"
using namespace std;
int main()
{
//Starting with int operations
Type<int> num1(3);
Type<int> num2;
num2.setValue(4);
num2.Sum(num1);
num2.Difference(num1);
num2.Product(num1);
num2.Quotient(num1);
//Double operations
Type<double> num3(3.3);
Type<double> num4;
num4.setValue(4.4);
num4.Sum(num3);
num4.Difference(num3);
num4.Product(num3);
num4.Quotient(num3);
//Hello prints for each object
num1.printHello();
num2.printHello();
num3.printHello();
num4.printHello();
return 0;
}
Edit: Я обновил код, что я фиксированы. У меня больше нет ошибок с передаваемыми переменными. Тем не менее, я все же имею исходную ошибку, когда функции не являются членами типа
У вас есть несколько вызовов функций, отсутствующих в их аргументах, те, у которых не всегда есть правильные аргументы, вы пытаетесь изменить постоянные объекты, и у вас отсутствует скобка вокруг выражений. –
Да, я знаю о звонках. Эта часть кода еще не закончена, я пытаюсь исправить первую ошибку, потому что я перехожу к ней. – Sean
Вы должны создать [MCVE], чтобы мы могли вам помочь. Я не могу воспроизвести проблему, и я не знаю, действительно ли вызывает ее одна из других проблем. –