gpt4 book ai didi

c++ - 从子类访问模板类成员时找不到标识符错误

转载 作者:行者123 更新时间:2023-12-02 10:56:30 27 4
gpt4 key购买 nike

这是我关于StackOverflow的第一个问题。我搜索了类似的“找不到标识符”错误,但找不到任何有用的信息。感谢您的帮助,因为我一直在努力2个小时,没有任何结果。

它基本上会创建一个类型为“Addition”的对象,并打印“1 +1 = 2”(如果可行)。

当我不使用模板时,它工作正常。但是,当我将所有内容更改为模板时,它停止工作。我不知道这个。

Visual Studio不会在红色下划线,但是对于m_Argument_1和m_Argument_2我收到“未定义标识符”错误。

谢谢您的帮助,如果在这里问的这个问题太简单,我深表歉意,但尽管如此,我仍然找不到解决方法或找出问题所在。

这是我的头文件“Expression.h”:

#ifndef OPERATION_HEADER
#define OPERATION_HEADER

#include <string>
#include <iostream>

template <typename T>
class Expression
{
protected:

char m_ExpressionSign; /* Represents Expression's Sign ('+','-','*','/') */

T m_Argument_1; /* Represents L Argument */
T m_Argument_2; /* Represents R Argument */

public:

Expression(T arg_1, T arg_2, char expressionSign) : m_Argument_1(arg_1), m_Argument_2(arg_2), m_ExpressionSign(expressionSign) { };

virtual T Result() const = 0;

virtual void Print(std::ostream& out) const;

friend std::ostream& operator << (std::ostream& out, const Expression<T>& expression);
};

template <typename T>
class Addition : public Expression<T>
{
public:
Addition(T arg1, T arg2) : Expression<T>(arg1, arg2, '+') {};
T Result() const { return m_Argument_1 + m_Argument_2; };
};

template <typename T>
void Expression<T>::Print(std::ostream& out) const
{
out << m_Argument_1 << " " << m_ExpressionSign << " " << m_Argument_2 << " = ";
}

template <typename T>
std::ostream& operator << (std::ostream& out, const Expression<T>& expression)
{
expression.Print(out);
return out;
}

#endif /* OPERATION_HEADER */

这是我的main.cpp:
#include <iostream>
#include <iomanip>

#include "Expression.h"

int main(int argc, char** argv)
{
Addition<int> A2(1, 1);

std::cout << "A2: " << A2 << " = " << std::setw(2) << A2.Result() << std::endl;
retun 0;
}

最佳答案

从类模板继承时,需要对标识符进行限定,以便编译器知道它们来自何处。在这种情况下,可以在Addition的定义中执行以下操作:

T Result() const { return this->m_Argument_1 
+ this->m_Argument_2; };

或者,您可以使用以下方式限定名称:
T Result() const { return Expression<T>::m_Argument_1 
+ Expression<T>::m_Argument_2; };

关于c++ - 从子类访问模板类成员时找不到标识符错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62159121/

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