【问题标题】:Error request for member '.......' in '......', which is of non-class type '.....' [closed]'......'中的成员'.......'的错误请求,它是非类类型'.....' [关闭]
【发布时间】:2020-07-24 13:41:03
【问题描述】:
for(i=0;i<x;i++)
{
    for(j=0;j<i;j++)
    {
        if(bor.hasil[i]<bor.hasil[j])
        {
            bor.n[i].swap (bor.hasil[j]);
            
            tmp=bor.hasil[i];
            bor.hasil[i]=bor.hasil[j];
            bor.hasil[j]=tmp;
        }
    }
}

如何修复'bor.tes::n[i]'中成员'swap'的错误请求,它是非类类型'char'?

【问题讨论】:

  • swap函数吗?
  • 所提供的代码和诊断似乎并不一致。提供的代码中没有bor.tes
  • @JohnBollinger 是什么意思?
  • 从你的其他问题来看,bor.n[i].swap (bor.hasil[j]); 应该是std::swap(bor.hasil[i], bor.hasil[j]);吗?

标签: c++ sorting bubble-sort


【解决方案1】:

如何修复'bor.tes::n[i]'中成员'swap'的错误请求,它是非类类型'char'?

虽然它似乎与问题中提供的代码不符,但诊断相对清晰。它抱怨试图在bor.tes::n[i] 指定的对象上调用名为swap() 的方法。这是不可接受的,因为bor.tes::n[i] 的类型是char,它不仅没有任何名为swap() 的方法,而且它不是类类型,根本没有任何方法.

你需要想出另一种方式来执行你想要的操作,比如std::swap

// swap the values of x and y, provided that x is move-assignable and move-constructible
// and that y is swappable
std::swap(x, y);

或者总是有一个很好的、老式的使用临时的三向交换:

// swap the values of chars x and y:
char tmp = x;
x = y;
y = tmp;

【讨论】:

  • 非常感谢,它的工作!
  • 第一行应该是std::swap(bor.hasil[i], bor.hasil[j]);?
  • @churill,我不倾向于猜测 OP 的实际代码是什么。呈现的代码混合了bor.nbor.hasil,这本身就很可疑,而且它们呈现的错误消息又指的是别的东西。 std::swap() 可能比我提供的老式交换更惯用,但根据细节,可能 都不 对于 OP 的真正目的是可行的。这个答案的重点是解释诊断。
  • @JohnBollinger 当然是对的,那里没有评论家:) 只是想提一下,因为 OP 的最后一个问题也是针对这样的,有人建议改用 std::swap。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-20
  • 2012-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-08
相关资源
最近更新 更多