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:Is
loadFromFile
是一个类的非静态成员函数吗?@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) {/*...*/}