gpt4 book ai didi

c++ - 类中的函数定义需要其他类中的相同函数: compilation error

转载 作者:行者123 更新时间:2023-12-02 10:06:41 25 4
gpt4 key购买 nike

我有一个枚举类“Suit”,并定义了一个函数“string to_string(Suit e)”
在另一个类“Card”中,我有一个成员变量“my_Suit”和一个成员函数“to_string”。该函数使用“my_Suit”作为参数调用函数“to_string”。
在编译时,我得到一个错误,编译器(g++)正在寻找函数“Card::to_string(Suit&)”,但是该函数不存在(不在提到的范围“Card::”之内)。
错误状态:

error: no matching function for call to ‘Card::to_string(Suit&)’

candidate: std::__cxx11::string Card::to_string()


我如何向编译器说明他必须搜索类外部定义的函数?
这是一段在编译时给出错误的代码。
实际上,代码在几个头文件和源文件之间划分,但错误保持不变。
#include <iostream>

/******************** enum class Suit ********************/

enum class Suit
{
Clubs, Spades, Hearts, Diamonds
};

std::string to_string(Suit e)
{
return ("calling 'to_string' function with Suit as parameter");
}

/******************** clas Card ********************/

class Card
{

private:
Suit m_Suit;
public:
Card() { m_Suit = Suit::Clubs; }

std::string to_string()
{
return ( to_string(m_Suit) );
}
};

int main()
{
std::cout << "Hello world!\n";
return (0);
}

最佳答案

由于OP已经怀疑这是范围问题。
class Card具有自己的范围,并提供成员Card::to_string()

在内部成员函数中,如果解析失败,则首先尝试在类范围内解析所有符号,然后再解析到外部范围。

在这种情况下,名称解析没有失败,但是提供了一个候选者。

不幸的是,名称解析一旦找到候选人就停止了–在OP中是错误的名称。

因此,有必要提供一些明确的帮助-范围运算符(::)。

固定的Card::to_string():

        std::string to_string() 
{
return ::to_string(m_Suit);
}

OP的固定样本:
#include <iostream>

/******************** enum class Suit ********************/

enum class Suit
{
Clubs, Spades, Hearts, Diamonds
};

std::string to_string(Suit e)
{
return ("calling 'to_string' function with Suit as parameter");
}

/******************** class Card ********************/

class Card
{

private:
Suit m_Suit;
public:
Card() { m_Suit = Suit::Clubs; }

std::string to_string()
{
return ::to_string(m_Suit);
}
};

int main()
{
std::cout << Card().to_string() << '\n';
return (0);
}

输出:

calling 'to_string' function with Suit as parameter

Live Demo on coliru

顺便说一句。作用域运算符通常在编译时解决,并且不会影响运行时行为。

关于c++ - 类中的函数定义需要其他类中的相同函数: compilation error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59908632/

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