2

Можете ли вы объяснить, почему это не скомпилируется:Возврат экземпляра по значению из стека метод компиляции

(это ошибка:

../Man.cpp:33:9: error: conversion from ‘Man (*)()’ to non-scalar type ‘Man’ requested) 

Код:

Man goo(){ 
    Man m(); 
    return m; 
} 

, но это :

Man goo(){ 
    return Man(); 
} 
+4

Еще один «самый неприятный синтаксический разбор». –

+0

В следующий раз, пожалуйста, * прочитайте * информацию о том, как задать вопрос и инструкции по форматированию. –

ответ

4
Man m(); 

Это означает, что «где-то в программе, я буду определять функцию с именем m, который не принимает никаких аргументов и возвращает Man ». Да, даже когда вы пишете его внутри другой функции.

Man m; 

Это означает, что "m является переменной типа Man". Поскольку Man - это тип класса, будет вызываться конструктор по умолчанию, и никакие круглые скобки не нужны.

2

Вы дон 't need() в первом случае. Конструктор по умолчанию называется неявным.

Man goo(){ 
    Man m; 
    return m; 
} 

Во втором случае вы вызываете конструктор.

+0

спасибо. самый быстрый ответ. – ozma

3

Вы не хотите, чтобы эти круглые скобки в первом примере:

Man goo(){ 
    Man m; 
    return m; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^