yapıcıda 1 argüman bekliyor 0" C++ 'da basit bir iş parçacığı sunucu uygulaması yapıyorum, şey, yapılandırma dosyalarımı ayrıştırmak için libconfig ++ kullanıyorum. Eh, libconfig multithreading desteklemiyor, bu yüzden "destek" için iki sarmalayıcı sınıfları kullanıyorum. Benim main.cpp dosyasından çağrıldığındaGarip "Aday,
class app_config {
friend class app_config_lock;
public:
app_config(char *file) :
cfg(new libconfig::Config()),
mutex(new boost::mutex())
{
cfg->readFile(file);
}
private:
boost::shared_ptr<libconfig::Config> cfg;
boost::shared_ptr<boost::mutex> mutex;
};
korkunç Başarısız:
app_main::app_main(int c, char **v) : argc(c), argv(v) {
// here need code to parse arguments and pass configuration file!.
try {
config = app_config("mscs.cfg");
} catch (libconfig::ParseException &e) {
cout << "Parse error at line " << e.getLine() << ": " << e.getError() << endl;
throw;
} catch (libconfig::FileIOException &e) {
cout << "Configuration file not found." << endl;
throw;
}
}
Ve diyor ki: Nokta bunlardan biri başarısız olduğu ben çünkü garip
main.cpp: In constructor ‘app_main::app_main(int, char**)’:
main.cpp:38:54: error: no matching function for call to ‘app_config::app_config()’
main.cpp:38:54: note: candidates are:
../include/app_config.h:15:5: note: app_config::app_config(char*)
../include/app_config.h:15:5: note: candidate expects 1 argument, 0 provided
../include/app_config.h:12:7: note: app_config::app_config(const app_config&)
../include/app_config.h:12:7: note: candidate expects 1 argument, 0 provided
main.cpp:41:39: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings] (THIS CAN BE IGNORED, I WAS USING STD::STRING, YET CHANGED IT FOR TESTING PURPOSES)
açıkça bir argümanı geçiriyor ve dahası onun bir char *
!
Eh, her zaman olduğu gibi, herhangi bir yardım takdir edilecektir.
Julian.
Bu sorunu çözdü. Ancak, statik bir dizgeden ziyade değişken bir dizeyi geçirmeyi planlıyorum, app_main üyemdeki argc ve argv değişkenlerimi gerçekten işleme koyabildiğim herhangi bir yol var mı? –
@JulianBayardoSpadafora: Hayır. Kurucu argümanlarını sadece derleme zamanı sabitleri değil, üye yapıcılara da iletebilirsiniz. Ve ayrıca * ctor-initializer-list * içinde statik üye fonksiyonlarını da arayabilirsiniz. Son olarak, üyelerin oluşturulduğu düzen üzerinde kontrolünüz var. Ancak, muhtemelen bu işlemden önce argüman işlemi yapmanız ve 'getConfigFilename()' veya böyle bir üye işleviyle bir çeşit seçenek paketi nesnesini iletmeniz gerekecektir. Veya 'app_config' dosyasını yapıcıdan yapmak yerine okumak için bir işlev verin. –