Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将常量参数从一个成员函数传递到另一个成员函数?_C++ - Fatal编程技术网

C++ 如何将常量参数从一个成员函数传递到另一个成员函数?

C++ 如何将常量参数从一个成员函数传递到另一个成员函数?,c++,C++,我有一节课 class Foo : Bar { public: virtual bool function1(const Card &arg1) const{ function2(arg1); } virtual void function2(const Card &anotherArg) { /* Do stuff with private member variables*/ } private: .... }; “卡片”是一种类别类型

我有一节课

 class Foo : Bar {
 public:
 virtual bool function1(const Card &arg1) const{
     function2(arg1);
 }
 virtual void function2(const Card &anotherArg) {
     /* Do stuff with private member variables*/
 }
 private:
 ....
 };
“卡片”是一种类别类型。我收到一个错误“成员变量函数'function2'不可行:'此'参数的类型为'const Simple',但函数未标记为const。”

我不太确定是什么问题。function2将常量作为参数之一,因此arg1是常量应该没有问题,因为它不会被修改。此外,我尝试过这样做:

function2(arg1) const; 

但是它也不起作用。

在您的示例中,
function1()
是一种
const
方法。
const
方法只能调用其他
const
方法
function2()
不是一个
const
方法


这与每个方法的实际参数无关。

const This只能调用const This,non cont This可以调用两者。 在你的代码中,你调用了一个非常量this和constthis:函数一的this是const,而函数二的this是non-const,因此这是错误

  • 然而,函数2可以调用函数
要更正您的示例,请执行以下操作:

class Foo : Bar 
{
     public:
         virtual bool function1(const Card &arg1) const
         {
             function2(&arg1);
         }
         virtual void function2(const Card &anotherArg)const
         {
             /* Do stuff with private member variables*/
         }
     private:
 ....
 };

这个编译器错误在您的代码示例中是不可能的。这很奇怪。我使用的是XCode,它突出显示了红线。我省略了我认为不相关的代码的一大部分。也许是遗漏的部分造成了问题?你认为不相关的可能不是不相关的。“const和ARG1”不是有效的C++代码。删除无关的信息是可以的,但是你最终还是要用有效的C++代码。你错过了类型。同样,对于
const&anotherArg
。哦,很抱歉,我忘了包含它,还有其他方法可以调用function2吗?将其本身设置为
const
函数。我不能,因为我需要function2来编辑私有成员variables@Goldname(a)一个极其不明智的
const_cast
(言语无法表达这可能是多么错误),或者(b)生成所需的成员并同时生成
函数2
常量。在这两种情况下,你最好知道你在做什么,并且认真考虑你遇到的路障是一种非常可能的设计缺陷。根据定义,<代码> const 函数不能修改它的对象。但如果它要调用其他一些非
const函数,显然它可以。这就是为什么你不能调用它,以及为什么C++禁止它。欢迎来到C++。如果我做函数2 const的问题是,我将不能修改私有成员变量,所以我不能使它变为常数。但我仍然想调用函数2。如果您想修改,请反转,例如,使函数2变为非常量,以便它可以修改成员数据,并让函数1变为常量,但从函数2中调用函数1,而不是相反。@Goldname您必须选择一个或另一个<代码>函数1声明它不会修改成员变量,因此不允许调用不修改成员变量的函数。