I have a class with 2 public constructors, that I want to call a private constructor:
class CDeviceTSGetObservationResponse : public CDeviceServerResponse
{
public:
/**
* Public constructor. Used to construct a response containing
* the required information from the TotalStation device.
*
* @param horizontalAngle
* The horizontal angle.
* @param verticalAngle
* The vertical angle.
* @param slopeDistance
* The slope distance.
*/
CDeviceTSGetObservationResponse(double horizontalAngle,
double verticalAngle,
double slopeDistance)
: CDeviceTSGetObservationResponse(CDeviceServerResponse::SUCCESS_MESSAGE,
horizontalAngle,
verticalAngle,
slopeDistance) {}
/**
* Public constructor. Used to construct a response containing
* the error message from the TotalStation device.
*
* @param errorMsg
* The error message for the response.
*/
CDeviceTSGetObservationResponse(std::string errorMsg)
: CDeviceTSGetObservationResponse(errorMsg,
0.0,
0.0,
0.0) {}
private:
/**
* Private constructor.
*
* @param errorMsg
* The error message for the response.
* @param horizontalAngle
* The horizontal angle.
* @param verticalAngle
* The vertical angle.
* @param slopeDistance
* The slope distance.
*/
CDeviceTSGetObservationResponse(std::string errorMsg,
double horizontalAngle,
double verticalAngle,
double slopeDistance)
: CDeviceServerResponse(CDeviceServerResponse::TS_GET_OBSERVATION,
errorMsg),
m_dHorizontalAngle(horizontalAngle),
m_dVerticalAngle(verticalAngle),
m_dSlopeDistance(slopeDistance){}
/** The horizontal angle. */
double m_dHorizontalAngle;
/** The vertical angle. */
double m_dVerticalAngle;
/** The slope distance. */
double m_dSlopeDistance;
}; // CDeviceTSGetObservationResponse
So the user will either call the constructor passing three booleans if there was no problem, and the error message on the baseclass will default to success.
Or they call the constructor passing in the error message, which will default the values to 0.0.
I thought I could do this with the code above, but I get the following error message:
camd011> make
g++ -c CDeviceTSGetObservationResponse.cpp \
-I.. -o bin/CDeviceTSGetObservationResponse.o
In file included from CDeviceTSGetObservationResponse.cpp:13:0:
CDeviceTSGetObservationResponse.h: In constructor 'device::response::CDeviceTSGetObservationResponse::CDeviceTSGetObservationResponse(double, double, double)':
CDeviceTSGetObservationResponse.h:44:10: error: type 'device::response::CDeviceTSGetObservationResponse' is not a direct base of 'device::response::CDeviceTSGetObservationResponse'
CDeviceTSGetObservationResponse.h:47:55: error: no matching function for call to 'device::response::CDeviceServerResponse::CDeviceServerResponse()'
CDeviceTSGetObservationResponse.h:47:55: note: candidates are:
CDeviceServerResponse.h:72:4: note: device::response::CDeviceServerResponse::CDeviceServerResponse(device::response::CDeviceServerResponse::EServerMessageIdentifier, std::string)
CDeviceServerResponse.h:72:4: note: candidate expects 2 arguments, 0 provided
CDeviceServerResponse.h:31:7: note: device::response::CDeviceServerResponse::CDeviceServerResponse(const device::response::CDeviceServerResponse&)
CDeviceServerResponse.h:31:7: note: candidate expects 1 argument, 0 provided
CDeviceTSGetObservationResponse.h: In constructor 'device::response::CDeviceTSGetObservationResponse::CDeviceTSGetObservationResponse(std::string)':
CDeviceTSGetObservationResponse.h:57:10: error: type 'device::response::CDeviceTSGetObservationResponse' is not a direct base of 'device::response::CDeviceTSGetObservationResponse'
CDeviceTSGetObservationResponse.h:57:42: error: 'errorMeg' was not declared in this scope
CDeviceTSGetObservationResponse.h:60:45: error: no matching function for call to 'device::response::CDeviceServerResponse::CDeviceServerResponse()'
CDeviceTSGetObservationResponse.h:60:45: note: candidates are:
CDeviceServerResponse.h:72:4: note: device::response::CDeviceServerResponse::CDeviceServerResponse(device::response::CDeviceServerResponse::EServerMessageIdentifier, std::string)
CDeviceServerResponse.h:72:4: note: candidate expects 2 arguments, 0 provided
CDeviceServerResponse.h:31:7: note: device::response::CDeviceServerResponse::CDeviceServerResponse(const device::response::CDeviceServerResponse&)
CDeviceServerResponse.h:31:7: note: candidate expects 1 argument, 0 provided
CDeviceTSGetObservationResponse.cpp: In member function 'void device::response::CDeviceTSGetObservationResponse::serialize(Archive&, unsigned int)':
CDeviceTSGetObservationResponse.cpp:38:14: error: 'base_object' is not a member of 'boost::serialization'
CDeviceTSGetObservationResponse.cpp:38:69: error: expected primary-expression before '>' token
make: *** [bin/CDeviceTSGetObservationResponse.o] Error 1
this(arguments)?: CDeviceTSGetObservationResponse(errorMeg,be: CDeviceTSGetObservationResponse(errorMsg,instead? In the middle constructor.