C++ 默认参数有什么问题?
我有这个函数声明和定义 定义C++ 默认参数有什么问题?,c++,C++,我有这个函数声明和定义 定义 Main void cppMain(int-argc,char-const*const-argv[]) { (argc==1)| | throwX(S() 仅在声明中提及参数的默认值: //declaration with default parameter void loadFromFile( string const& fileName, Frames& frames,
Main
void cppMain(int-argc,char-const*const-argv[])
{
(argc==1)| | throwX(S()
仅在声明中提及参数的默认值:
//declaration with default parameter
void loadFromFile( string const& fileName,
Frames& frames,
ostream& log =std::clog);
不要在定义中提及默认值:
//definition
void loadFromFile( string const& fileName,
Frames& frames,
ostream& log)
{
//....
}
现在它已经很完美了。它现在应该可以编译了!在您应该编写的loadFromFile
函数定义中
void loadFromFile( string const& fileName, Frames& frames, ostream& log) {/*...*/}
您不应该在函数定义中指定默认参数值。如其他答案中所述
错误原因:
错误的原因是您在函数定义中提到了默认值参数。它们只应在函数声明中提及,而不应在定义中提及
回答第二个问题。
请告诉我main()中的参数(int argc,char argv[])应该读什么?*
argc=>提供给程序的参数数(包括程序)
argv=>指向字符串的指针数组,字符串是程序提供的参数,其类型为“指向字符的指针数组”
这些参数通过主机系统的命令行解释器或作业控制语言传递给程序
<>你可以阅读理解传递参数到Maun.@小姐:这就是语言设计的方式,如果你想研究这个,那么就可以得到C++标准书。@小姐:还有一个关于默认参数的有趣故事。请看:@小姐:也许,这本书不包含这些信息。我也不仅仅说了C++。ook
。我说C++标准
@Miss:IsloadFromFile
是一个类的非静态成员函数吗?@Miss:你把一切都搞砸了。loadFromFile
不是任何类的成员。删除static
关键字它的定义,因为static
意味着该函数只在该文件中可见。它是C无法从任何其他源文件调用。因此,我必须只加载一个输入,我认为argc应等于1。并且argv(1)将获得一个作为数组元素的输入。对吗?@Miss:argv中的第一个元素始终是程序本身的名称,因此argc始终至少为1,argv[0]是程序的名称,然后是传递给程序的其他参数。让我先研究一下该链接,然后再看main的arg问题。感谢该链接现在告诉我有关loadFrom
的故事?它是静态自由函数?还是类的成员还是什么?我发现在编辑的帖子中,错误与loadFrom
函数有关,但您没有发布它的定义。它的定义在哪里。什么都没有!@Nawaz:这里loadFrom既不是静态函数,也不是类的成员..它只是一个非静态函数,…您是对的,我没有添加laodFrom函数。。。
//-------------------------- FeatureVector:
int FeatureVector::count()const
{
return values_.size();
}
double FeatureVector::operator[](int i)const
{
return element(i, values_);
}
FeatureVector::FeatureVector( int n )
: values_( n )
{}
/*==================Frame====================================*/
Frame::Frame( int nFeatures )
: features( nFeatures )
{}
/*===================Frames==========================*/
int Frames::count() const
{
return frames_.size();
}
int Frames::nFeaturesPerFrame() const
{
return nFeaturesPerFrame_;
}
Frame const& Frames::operator[]( int i ) const
{
return element( i, frames_ );
}
Frames::Frames( int n )
: nFeaturesPerFrame_( n )
{}
/*============loading the frames ===============*/
void loadFromFile( string const& fileName, Frames& frames, ostream& log)
{
using std::endl;
using std::ifstream;
string const streamDescription = "text data file " + fileName;
log << "Opening " << streamDescription << " for reading..." << endl;
ifstream stream( fileName.c_str() );
(!stream.fail())
|| throwX( S() << "Error opening " << streamDescription << "." );
loadFrom( stream, frames, streamDescription, log );
}
Error 1 error C2572: 'soundData::loadFromFile' : redefinition of default parameter : parameter 3 c:lacture\loading frames\loading frames\sounddata.cpp 111 1 loading frames
Error 2 error LNK2019: unresolved external symbol "void __cdecl soundData::loadFrom(class std::basic_istream<char,struct std::char_traits<char> > &,class soundData::Frames &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_ostream<char,struct std::char_traits<char> > &)" (?loadFrom@soundData@@YAXAAV?$basic_istream@DU?$char_traits@D@std@@@std@@AAVFrames@1@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@3@AAV?$basic_ostream@DU?$char_traits@D@std@@@3@@Z) referenced in function "void __cdecl soundData::loadFromFile(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class soundData::Frames &,class std::basic_ostream<char,struct std::char_traits<char> > &)" (?loadFromFile@soundData@@YAXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAVFrames@1@AAV?$basic_ostream@DU?$char_traits@D@std@@@3@@Z) C:\loading frames\soundData.obj loading frames
//declaration with default parameter
void loadFromFile( string const& fileName,
Frames& frames,
ostream& log =std::clog);
//definition
void loadFromFile( string const& fileName,
Frames& frames,
ostream& log)
{
//....
}
void loadFromFile( string const& fileName, Frames& frames, ostream& log) {/*...*/}