У меня есть некоторые проблемы с моим собственным, определяемым пользователем исключением в CORBA. Вот мой очень простой код:Определенные пользователем исключения CORBA дали мне ошибки после компиляции
interface Interfface
{
exception myOwnException {};
void ffunction(in double arg) raises (myOwnException);
};
#include "Interfface.hh"
class Implementation : public POA_Interfface
{
public :
virtual void ffunction(double arg) throw (myOwnException);
};
#include "Implementation.h"
void Implementation::ffunction(double arg) throw (myOwnException)
{
arg ++;
throw (myOwnException);
}
И когда я собирал Implementation.cpp, он дал мне некоторые ошибки (http://pastie.org/private/a22ikk09zkm9tqywn37w):
Implementation.cpp: In member function ‘virtual void Implementation::ffunction(double)’:
Implementation.cpp:5: error: ‘myOwnException’ was not declared in this scope
In file included from Implementation.cpp:1:
Implementation.h:6: error: expected type-specifier before ‘myOwnException’
Implementation.h:6: error: expected ‘)’ before ‘myOwnException’
Implementation.h:6: error: expected ‘;’ before ‘myOwnException’
Implementation.cpp:3: error: expected type-specifier before ‘myOwnException’
Implementation.cpp:3: error: expected ‘)’ before ‘myOwnException’
Implementation.cpp:3: error: expected initializer before ‘myOwnException’
Что случилось с этим кодом? И еще один вопрос: как я могу сделать то же самое на Java?
Heres мой код: http://speedy.sh/F5utX/user-defined-exception.tar Я сделал то же самое в Java (код также в определенном пользователе-exception.tar), но ява код дал мне это:
Note: InterffacePOA.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Полезно знать;) Я удалил объявления «throw» в своих файлах * .h и * .cpp. Хотя throw myOwnException(); дал мне это: || Implement.cpp: В функции-члене «virtual void Implementation :: ffunction (double)»: . Реализация.cpp: 6: ошибка: «myOwnException» не было объявлено в этой области || этот код: throw Interfface :: myOwnException(); помог мне. Поэтому я могу сказать, что проблема решена. Большое большое спасибо! :) –
Еще один вопрос: как я могу определить свой idl-интерфейс, чтобы получить sth, как это: || Строковая причина = «Sth пошло не так: P»;/* кусок кода * /; throw myOwnException (причина); || Вы знаете? –
Просто добавьте член в объявление исключения.Например, string cause ;. –