W T Meyer
2007-05-08 02:41:16 UTC
I'm trying to pass a fixed-length array of structs and I'm getting a
cryptic error message. I see others have posted similar - but not
identical - problems and it is not clear to me what the solution or
workaround is. Can someone provide some insight?
Here is my IDL:
------------
module CoRCC {
enum vmeType {SBC, ROD, TIM, EMPTY, OTHER, UNKNOWNTYPE};
enum vmeModStatus {OK, WARNING, ERROR, UNKNOWNSTATUS};
struct slotInfo {
vmeType contents;
long serNo;
vmeModStatus status;
long revision;
};
typedef slotInfo crateInfo[22];
interface RCC {
long scanCrate(out crateInfo modList);
}; /* end of interface RCC */
}; /* end of module CoRCC */
-----------
In my server application, everything compiles and links with no
warnings or errors.
When I try to build a client, I get the following error message:
-------------
CoRCCClient.cc:92: choosing `T& _CORBA_Array_Fix_Var<T_Helper,
T>::operator[](long unsigned int) [with T_Helper =
CoRCC::crateInfo_copyHelper, T = CoRCC::crateInfo_slice]' over `operator[]'
CoRCCClient.cc:92: because worst conversion for the former is better than
worst conversion for the latter
-------------
The relevant part of the client code is as follows:
-------------
int ScanCrate(int rccHandle) {
int status = 0;
int serNo;
CoRCC::crateInfo_var modList = new CoRCC::crateInfo();
status = rccref[rccHandle]->scanCrate(modList);
for (int i=2; i<NSLOTS+1; i++) {
cout << "Slot Number " << i << endl;
serNo = modList[i].serNo; //<<<< This is line 92,
where the error is
}
return status;
}
cryptic error message. I see others have posted similar - but not
identical - problems and it is not clear to me what the solution or
workaround is. Can someone provide some insight?
Here is my IDL:
------------
module CoRCC {
enum vmeType {SBC, ROD, TIM, EMPTY, OTHER, UNKNOWNTYPE};
enum vmeModStatus {OK, WARNING, ERROR, UNKNOWNSTATUS};
struct slotInfo {
vmeType contents;
long serNo;
vmeModStatus status;
long revision;
};
typedef slotInfo crateInfo[22];
interface RCC {
long scanCrate(out crateInfo modList);
}; /* end of interface RCC */
}; /* end of module CoRCC */
-----------
In my server application, everything compiles and links with no
warnings or errors.
When I try to build a client, I get the following error message:
-------------
CoRCCClient.cc:92: choosing `T& _CORBA_Array_Fix_Var<T_Helper,
T>::operator[](long unsigned int) [with T_Helper =
CoRCC::crateInfo_copyHelper, T = CoRCC::crateInfo_slice]' over `operator[]'
CoRCCClient.cc:92: because worst conversion for the former is better than
worst conversion for the latter
-------------
The relevant part of the client code is as follows:
-------------
int ScanCrate(int rccHandle) {
int status = 0;
int serNo;
CoRCC::crateInfo_var modList = new CoRCC::crateInfo();
status = rccref[rccHandle]->scanCrate(modList);
for (int i=2; i<NSLOTS+1; i++) {
cout << "Slot Number " << i << endl;
serNo = modList[i].serNo; //<<<< This is line 92,
where the error is
}
return status;
}