【问题标题】:method on c++ compared to java (syntax from java to c++)c++ 上的方法与 java 的比较(从 java 到 c++ 的语法)
【发布时间】:2018-03-01 21:08:35
【问题描述】:

我开始在 c++ 上编写代码,我有良好的 java 背景,我对 C++ 的语法有一些问题。 我坚持一件事,我创建了一个方法“SortCloums”,但我错过了一些东西。在 for 循环中,它给我一个按摩:

expression must have pointer-to-object type

这是我的短代码,是的,我还在学习指针。需要你们一些指导。

#include <iostream>
using namespace std;

const int size = 4;
void SortCloums(int arr[size][size], int sizeOfArray);
int main(){

int arr[size][size] = { { 0, 4, 6, 0 },
                         {5, 6 , 8, 12},
                         {50, 8, 12, 24},
                         {900, 10, 30, 50} };

SortCloums(arr, size);
    return 0;
 }

   void SortCloums(int arr ,int sizeOfArray) {
    // now we check if the array is column sorted or not.
    bool flag = true;

for (int i = 0; i < sizeOfArray && flag != false; i++){
    for (int j = 0; j < sizeOfArray && flag != false; j++){
        if (arr[j][i] > arr[j+1][i]){
            flag = false;
            std::cout << "The array of column unsorted" << endl;
            std::cin.get();
        }
    }
}
if (flag == true){
    std::cout << "The array is column sorted" << endl;
    std::cin.get();
}
    }

【问题讨论】:

  • 如果你想学习正确的 C++,就把你在 Java 中学到的一切都忘掉。请查看此C++ books 列表。
  • 请阅读:minimal reproducible example。您可以edit您的问题以提高其质量和获得良好答案的机会。
  • int arr[] [] 更改为std::vector&lt; std::vector&lt; int &gt; &gt;
  • 请注意,c++ 中的数组不是 Java 中的典型对象。值得注意的是,它们没有成员方法,也没有值语义。它们是非常低级的机制,有几个陷阱。相反,对具有编译时常量大小的数组使用 std::array,在其他情况下使用 std::vector。这只是事先熟悉 Java(或其他语言)如何导致对 c++ 的错误假设的一个示例。
  • 有什么问题?

标签: c++


【解决方案1】:

我猜错误信息指向这一行:

    if (arr[j][i] > arr[j+1][i]){

此代码将arr 视为二维数组。但是 arr 在这里以不正确的方式声明:

void SortCloums(int arr ,int sizeOfArray) {

因为声明先于用法,编译器认为声明正确,用法不正确。所以它会输出一个不是很清楚的错误信息。

要修复,请正确声明arr

void SortCloums(int arr[size][size], int sizeOfArray) {

这里arr 在概念上是一个二维数组,但对于various technical reasons,它形式上是一个指向数组的指针。您的错误消息提到了“指向对象”类型; “指向数组的指针”是这种情况的特例,因此可以修复错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    • 2011-05-28
    • 1970-01-01
    • 2011-01-07
    • 2020-02-05
    • 2016-01-21
    • 1970-01-01
    相关资源
    最近更新 更多