2013-05-19 6 views
0

Я пытаюсь вызвать конструктора из другого класса. Но, к сожалению, я получаю эту ошибку:Почему функция не была объявлена ​​в этой области?

Fun2 was not declared in this scope

Это мой код:

class Fun1 { 
public: 
    Fun1() { 
     Fun2("Message"); 
    } 
}; 

class Fun2 { 
public: 
    Fun2 (std::string s) { 
     std::cout << s; 
    } 
}; 

int main() 

} 

Как я могу отправить свое «сообщение» в конструктор другого класса?

ответ

2

С ++ обычно скомпилирован сверху вниз. Поскольку вы пытаетесь использовать Fun2, прежде чем вы его определили, компилятор жалуется. Вместо этого, вы можете просто определить свой Fun2 класс первый:

class Fun2 { 
public: 
    Fun2 (std::string s) { 
     std::cout << s; 
    } 
}; 

class Fun1 { 
public: 
    Fun1() { 
     Fun2("Message"); 
    } 
}; 

Теперь, когда компилятор видит, что вы используете идентификатор Fun2, он знает, что это соответствует, так как он уже видел определение.

Бывают случаи, когда компилятор фактически анализирует код за несколько проходов и в этих местах идентификаторы могут быть объявлены после их использования (например, члены).

1

Fun2 не определен в момент, когда вы определяете Fun1.

Попробуйте переслать объявление.

class Fun2; 

class Fun 1 { 
    ... class definition 
} 

class Fun2 { 
    .... class definition 
} 
+0

Они не смогут создать временный объект 'Fun2' в' Fun1', если все, что у них есть, является декларацией для него. –

2

fun2 должен быть объявлен первым, если вы используете его в FUN1:

class Fun2 { 
    public: 
    Fun2 (std::string s) { 
     std::cout << s; 
    } 
}; 

class Fun1 { 
    public: 
    Fun1() { 
     Fun2("Message"); 
    } 
}; 

int main() 

} 

Я просто хочу, чтобы получить 50 очков репутации комментировать>. <

+0

или вы можете переслать объявление. –

+0

как функция прототипов. это вещь дизайна. –

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