【发布时间】:2011-05-15 09:05:16
【问题描述】:
我有这个函数声明和定义..
定义
void loadFromFile(
string const& fileName,
Frames& frames,
ostream& log =std::clog
)
{
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 );
}
声明
void loadFrom(
istream& stream,
Frames& frames,
string const& streamName = "a text stream",
// ostream should also have default parameter as streamName
ostream& log =std::clog); //std::clog create an object for ostream
void loadFromFile(
string const& fileName,
Frames& frames,
ostream& log =std::clog);
主要
void cppMain( int argc, char const* const argv[] )
{
(argc == 1) || throwX( S()
<< "Usage: "
<< argv[0] << " <file1.txt>"
);
soundData::Frames testFrames;
soundData::loadFromFile( argv[0], testFrames );
// doTimeWarping( templateFrames, testFrames );
cout << "Done." << endl;
}
int main (int argc, char* argv[])
{
try
{
cppMain( argc, argv );
return EXIT_SUCCESS;
}
catch( exception const& x )
{
cerr << "!" << x.what() << endl;
}
return EXIT_FAILURE;
}
类定义
命名空间声音数据{
//-------------------------- 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
它有什么问题?我只加载一个文件,所以argc 应该是 1。但是为什么会导致错误呢?
还请告诉我应该怎么做才能读取参数(int argc, char* argv[])
在main()。
我想我没听懂。
【问题讨论】:
-
现在告诉我关于
loadFrom的故事?是无静电功能吗?或者它是班级成员还是什么? -
我觉得非常令人沮丧的是,在编辑后的帖子中,错误与
loadFrom函数有关,但您没有发布它的定义。以及它的定义。什么都没有! -
@Nawaz:这里的 loadFrom 既不是静态函数也不是类的成员。它只是一个非静态函数,...你说得对,我没有添加 laodFrom 函数...
标签: c++