请求 'a' 中的成员 'append',非 class 类型 'int'

request for member 'append' in 'a' , which is of non class type 'int'

我是编程新手,所以我的疑虑可能很愚蠢。 所以当我试图解决一个挑战时,我必须从数组中的数字中形成最大的数字。 所以我创建了一个比较函数并传递给排序函数。在比较函数中,我检查 a+b 是否大于 b+a,反之亦然。 但编译器显示错误,指出成员非 class 类型的请求。

我实际上不知道如何解决这个问题,我尝试使用谷歌搜索但没有得到我的解决方案。 我找到了类似的解决方案,但他们是用字符串来做的。可以用数组来完成吗?

int myCompare( int a, int b){


    int ab= a.append(b);
    int ba= b.append(a);

    if(ab>ba){
        return 1;
    }else{
        return 0;
    }

}

void biggestnum(int arr[], int n){

    if(n==0 || n==1){
        return;
    }

    sort(arr,arr+n, myCompare);

    for(int i=0;i<n;i++){
        cout<<arr[i]<<" ";
    }
    cout<<endl;
}

所以如果给定的数组是{54, 546, 548, 60}; 结果应该是 6054854654.

标量基本类型int没有方法。所以这些记录

a.append(b);
b.append(a);

无效。

好像是这样构造的

a.append(b)

您正在尝试将整数转换为 class std::string 的对象。但是,如果 abstd::string 类型的对象,则将一个对象附加到另一个对象是没有意义的。对比原字符串就够了

看来您要实现的目标如下

#include <iostream>
#include <string>
#include <iterator>
#include <algorithm>

bool myCompare( unsigned int a, unsigned int b )
{
    std::string s1 = std::to_string( a );
    std::string s2 = std::to_string( b );

    auto n = std::minmax( { s1.size(), s2.size() } );

    int result = s1.compare( 0, n.first, s2, 0, n.first );

    return ( result > 0 ) || 
           ( result == 0 && 
           ( ( s1.size() < n.second && s2[n.first] < s1[0] ) || 
             ( s2.size() < n.second && s2[0] < s1[n.first] ) ) );
}    

int main() 
{
    unsigned int a[] = { 54, 546, 548, 60 };

    std::sort( std::begin( a ), std::end( a ), myCompare );

    std::string s;

    for ( const auto &item : a )
    {
        s += std::to_string( item );
    }

    unsigned long long int value = std::stoull( s );

    std::cout << "The maximum number is " << value << '\n';

    return 0;
}

程序输出为

The maximum number is 6054854654

如果结果数太大而无法放入 unsigned long long int 类型的对象中,那么您可以删除该语句

    unsigned long long int value = std::stoull( s );

并且只输出结果字符串为

    std::cout << "The maximum number is " << s << '\n';