Ésta parece ser una cuestión trivial, pero me quedó colgado en él durante unas cuantas horas (quizás demasiado Java mató a mi C++ braincells).manera correcta para inicializar un objeto con excepción constructor tirar
He creado una clase que tiene el siguiente constructor (es decir, ningún constructor por defecto)
VACaptureSource::VACaptureSource(std::string inputType, std::string inputLocation) {
if(type == "" || location == "") {
throw std::invalid_argument("Empty type or location in VACaptureSource()");
}
type = inputType;
location = inputLocation;
// Open the given media source using the appropriate OpenCV function.
if(type.compare("image")) {
frame = cvLoadImage(location.c_str());
if(!frame) {
throw std::runtime_error("error opening file");
}
}
else {
throw std::invalid_argument("Unknown input type in VACaptureSource()");
}
}
Cuando quiero crear una instancia, utilizo
// Create input data object
try {
VACaptureSource input = VACaptureSource("image", "/home/cuneyt/workspace/testmedia/face_images/jhumpa_1.jpg");
}
catch(invalid_argument& ia) {
cerr << "FD Error: " << ia.what() << endl;
usage(argv[0]);
}
catch(runtime_error& re) {
cerr << "FD Error: " << re.what() << endl;
usage(argv[0]);
}
Sin embargo , en este caso, la instancia es local para este bloque y no puedo referirme a él en ningún otro lado. Por otra parte, no puedo decir
VACAptureSource input;
al inicio del programa ya que no hay constructor por defecto.
Cuál es la forma correcta de hacer esto?
Gracias!
¿Cómo resolverías esto en Java? Aplica la misma solución. Este problema no depende del idioma.Diferentes idiomas solo ofrecen una sintaxis diferente para propósitos equivalentes, considere que cuando define una variable en Java no está declarando un objeto sino un _reference_ (puntero en terminología C++), por lo que el código que parece similar en Java y C++ no es realmente código equivalente. –