C++ 如何在c++;
我有以下代码,并且编译正确:C++ 如何在c++;,c++,arrays,char,C++,Arrays,Char,我有以下代码,并且编译正确: char classfname[512] = "classifiers/cabmodel_VOC05motorbikes.xml"; strcpy(classfname,argv[i]); 但是,当我试图定义一个数组时,它包含与上述大小相同的字符串 在你的全力帮助下,它没有起作用 std::vector<std::string> classfname = { "classifiers/cabmodel_VOC05motorbikes.xml",
char classfname[512] = "classifiers/cabmodel_VOC05motorbikes.xml";
strcpy(classfname,argv[i]);
但是,当我试图定义一个数组时,它包含与上述大小相同的字符串
在你的全力帮助下,它没有起作用
std::vector<std::string> classfname = {
"classifiers/cabmodel_VOC05motorbikes.xml",
"classifiers/cabmodel_interm_nst100_VOC06person01train5_orienthistmod.xml" ,
"classifiers/cabmodel_interm_nst40_VOC06cat01train5_trainval_orienthistmod_nopert_facereg.xml",
"classifiers/cabmodel_interm_nst100_VOC06bicycle01train5_trainval_orienthistmod.xml",
"classifiers/cabmodel_VOC06carside.xml",
"classifiers/cabmodel_interm_nst100_VOC06horse01train5_trainval_orienthistmod_randsel0100.xml"
};
char *classfname[6]={-----}
std::vector<std::string> classfname;
classfname.push_back(",,,");
我只使用
std::vector
而不是“原始”C数组:
#包括
#包括
std::向量类fname;
classfname.push_back(“classifiers/cabmodel_VOC05motorbikes.xml”);
classfname.push_back(“分类器/cabmodel_interm_nst100_VOC06person01train5_orienthistmod.xml”);
...
std::vector
重载operator[]
,因此您的调用xmloadmodel(classfname[i],model)代码>应该可以工作。不再允许将字符串文本转换为字符*
,因为这样做永远都不安全。相反,创建一个const char*
数组。(虽然我不是100%肯定这是您的错误的原因,但您的代码与您的错误不匹配,我认为您更改了某些内容以使其生效)std::string
有一个来自const char*
的构造函数,所以这应该可以正常工作
另外,值得注意的是,(const::std string&
不正确,所以我们知道您在这里发布时更改了内容。不要这样做,否则我们帮不了您多少忙。应该是(const std::string&
)
此外,MrC64还指出,您应该使用RAII而不是原始数组和指针。它更容易使用,也更难搞乱
std::vector<std::string> classfname = {
"classifiers/cabmodel_VOC05motorbikes.xml",
"classifiers/cabmodel_interm_nst100_VOC06person01train5_orienthistmod.xml" ,
"classifiers/cabmodel_interm_nst40_VOC06cat01train5_trainval_orienthistmod_nopert_facereg.xml",
"classifiers/cabmodel_interm_nst100_VOC06bicycle01train5_trainval_orienthistmod.xml",
"classifiers/cabmodel_VOC06carside.xml",
"classifiers/cabmodel_interm_nst100_VOC06horse01train5_trainval_orienthistmod_randsel0100.xml"
};
如果您只想创建每个参数的数组,那么很容易:
int main() {int argc, const char** argv) {
std::vector<std::string> classfname(argv, argv+argc);
int main(){int argc,const char**argv){
std::向量类fname(argv,argv+argc);
一种解决方案是像这样使用const char*
:
const char *classfname[7]={"classifiers/cabmodel_VOC05motorbikes.xml",
"classifiers/cabmodel_interm_nst100_VOC06person01train5_orienthistmod.xml" ,
"classifiers/cabmodel_interm_nst40_VOC06cat01train5_trainval_orienthistmod_nopert_facereg.xml",
"classifiers/cabmodel_interm_nst100_VOC06bicycle01train5_trainval_orienthistmod.xml",
"classifiers/cabmodel_VOC06carside.xml",
"classifiers/cabmodel_interm_nst100_VOC06horse01train5_trainval_orienthistmod_randsel0100.xml",
};
另外,如果您想要包含这些字符串的std::vector
,则可以使用以下语句对其进行初始化:
const std::vector<std::string> classfname_vector(classfname, classfname + 7);
const std::vector classfname\u vector(classfname,classfname+7);
我注意到的另一件事是,您声明了一个包含7个元素的数组,但仅使用6个字符串文字对其进行了初始化。欢迎使用StackOverflow!您确定这是您的代码吗?错误似乎表明不是这样。这不是您有问题的代码。此外,IntelliSense错误不是编译器错误。IntelliSense sometimes会出错并显示无意义的内容,因此我不会太依赖它来产生错误。只需点击F7编译代码,然后返回真实的错误消息(以及您使用的真实代码)。请注意,您的函数原型:xmloadmodel(const::std string&file,Model&Model)
无效……可能是:xmloadmodel(const std::字符串和文件、模型和模型)
。您列出的代码似乎不会产生您发布的错误。请发布一个完整的小程序来演示您的错误。@Xeo和Rob:代码编译不好,它有错误,其中一个可能与他的问题有关。或者只是一个std::string数组,根本不接触char*。@CatPlusPlus:编辑了答案您发布了:谢谢您的回答,我尝试了一下,但坏的是我得到了相同的错误:code
strcpy(classfname[I],argv[I]);错误2错误C2664:'strcpy':无法将参数1从'std::string'转换为'char*'6智能感知:没有函数“strcpy”的实例匹配参数listwell,如果您使用RAII,您可能希望一直使用它。不需要对std::string调用strcpy
。无论哪种方式,您眼前的问题都是由
const char*``引起的。您尝试过吗?如果您的意思是:code
const char*classfname={-----}是的,我也试过了!不起作用,同样的错误,现在你只需要解决C++03中的静态初始化问题,这将是一个很好的答案。我试过了(向量定义)我得到了这些错误:code
Error 2 Error C2664:'strcpy':无法将参数1从'std::basic_string'转换为'char*'6 IntelliSense:没有函数“strcpy”的实例符合论点list@Xeo我刚刚试过了,我发布了上面的错误,仍然是同一个问题!@puresour:如果您使用std::string,您可以使用operator=重载来分配字符串,而不是C函数strcpy()。
int main() {int argc, const char** argv) {
std::vector<std::string> classfname(argv, argv+argc);
const char *classfname[7]={"classifiers/cabmodel_VOC05motorbikes.xml",
"classifiers/cabmodel_interm_nst100_VOC06person01train5_orienthistmod.xml" ,
"classifiers/cabmodel_interm_nst40_VOC06cat01train5_trainval_orienthistmod_nopert_facereg.xml",
"classifiers/cabmodel_interm_nst100_VOC06bicycle01train5_trainval_orienthistmod.xml",
"classifiers/cabmodel_VOC06carside.xml",
"classifiers/cabmodel_interm_nst100_VOC06horse01train5_trainval_orienthistmod_randsel0100.xml",
};
const std::vector<std::string> classfname_vector(classfname, classfname + 7);