Должно ли определение метода C ++ в классе указывать тип возвращаемого значения? - PullRequest
2 голосов
/ 14 октября 2010

Только что увидел этот вопрос , относящийся к проблеме ошибки сегментации в классе и программе C ++.

Мой вопрос относится к определению класса.Вот как это было опубликовано:

class A { 
    int x; 
    int y;

    public: 
    getSum1() const { 
        return getx() + y; 
    } 

    getSum2() const { 
        return y + getx(); 
    }

    getx() const { 
        return x; 
    }     
} 

Ни один из ответов на этот вопрос до сих пор не упоминал о типах возвращаемых методов.Я ожидаю, что они будут определены как

int getSum1() const { ....
int getSum2() const { ....
int getx() const { ....

Должны ли int быть там?

Ответы [ 3 ]

4 голосов
/ 14 октября 2010

Да, в C ++ возвращаемые типы должны быть указаны .Для сравнения между C и C ++ см. здесь .

3 голосов
/ 14 октября 2010

Да, int должны быть там.Исходный пример кода недопустим (как уже упоминал кто-то, возможно, код изначально был C, а не C ++).Во-первых, для объявления класса нужна завершающая точка с запятой, чтобы иметь возможность компилирования.g ++ сообщает:

foo.cpp:3: note: (perhaps a semicolon is missing after the definition of ‘A’)

Добавляя точку с запятой, мы получаем:

class A { 
  int x; 
  int y;

public: 
  getSum1() const { 
    return getx() + y; 
  } 

  getSum2() const { 
    return y + getx(); 
  }

  getx() const { 
    return x; 
  }     
};

Что все еще не удается.g ++ сообщит следующее:

foo.cpp:8: error: ISO C++ forbids declaration of ‘getSum1’ with no type
foo.cpp:12: error: ISO C++ forbids declaration of ‘getSum2’ with no type
foo.cpp:16: error: ISO C++ forbids declaration of ‘getx’ with no type
1 голос
/ 14 октября 2010

Да, они должны быть там.

...