C++ 使用C+中的链接文件编译错误+;

C++ 使用C+中的链接文件编译错误+;,c++,compilation,C++,Compilation,编辑:我已经通过字符串声明的std::前缀减少了大多数错误。但是,一些函数似乎存在问题,特别是那些以字符串作为参数的函数的定义 编辑#2:更新了我的代码(我的函数声明中有std::前缀,但没有在我的帖子中反映出来)。当我在有问题的函数中向字符串参数添加std::前缀时,请查看底部显示的错误 我有一个带有以下代码(相关代码)的头文件movie.h: 编译后,我得到以下错误: g++ -c movie.cpp -o movie.o movie.cpp:225: error: variable or

编辑:我已经通过字符串声明的
std::
前缀减少了大多数错误。但是,一些函数似乎存在问题,特别是那些以字符串作为参数的函数的定义

编辑#2:更新了我的代码(我的函数声明中有
std::
前缀,但没有在我的帖子中反映出来)。当我在有问题的函数中向字符串参数添加
std::
前缀时,请查看底部显示的错误


我有一个带有以下代码(相关代码)的头文件
movie.h

编译后,我得到以下错误:

g++ -c movie.cpp -o movie.o
movie.cpp:225: error: variable or field ‘addFirstName’ declared void
movie.cpp:225: error: ‘int Movie::addFirstName’ is not a static member of ‘class Movie’
movie.cpp:225: error: ‘string’ was not declared in this scope
movie.cpp:226: error: expected ‘,’ or ‘;’ before ‘{’ token
movie.cpp:240: error: variable or field ‘addLastName’ declared void
movie.cpp:240: error: ‘int Movie::addLastName’ is not a static member of ‘class Movie’
movie.cpp:240: error: ‘string’ was not declared in this scope
movie.cpp:241: error: expected ‘,’ or ‘;’ before ‘{’ token
movie.cpp:255: error: variable or field ‘addMovieName’ declared void
movie.cpp:255: error: ‘int Movie::addMovieName’ is not a static member of ‘class Movie’
movie.cpp:255: error: ‘string’ was not declared in this scope
movie.cpp:256: error: expected ‘,’ or ‘;’ before ‘{’ token
make: *** [movie.o] Error 1

有些人说我需要在函数定义中的字符串参数前面加上
std::

在这样做时:

// adding std:: prefix
void Movie::addFirstName(std::string nameFirst)
{
   directorFirstName = nameFirst.resize(10, ' ');
}

我得到以下错误。注意,我只为一个函数更改了它。第一个错误我不理解,而其余的仍然和以前一样

g++ -c movie.cpp -o movie.o
movie.cpp: In member function ‘void Movie::addFirstName(std::string)’:
movie.cpp:227: error: no match for ‘operator=’ in ‘((Movie*)this)->Movie::directorFirstName = nameFirst.std::basic_string<_CharT, _Traits, _Alloc>::resize [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>](10u, 32)’
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/basic_string.h:485: note: candidates are: std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::operator=(const std::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/basic_string.h:493: note:                 std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::operator=(const _CharT*) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/basic_string.h:504: note:                 std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::operator=(_CharT) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]
movie.cpp: At global scope:
movie.cpp:240: error: variable or field ‘addLastName’ declared void
movie.cpp:240: error: ‘int Movie::addLastName’ is not a static member of ‘class Movie’
movie.cpp:240: error: ‘string’ was not declared in this scope
movie.cpp:241: error: expected ‘,’ or ‘;’ before ‘{’ token
movie.cpp:255: error: variable or field ‘addMovieName’ declared void
movie.cpp:255: error: ‘int Movie::addMovieName’ is not a static member of ‘class Movie’
movie.cpp:255: error: ‘string’ was not declared in this scope
movie.cpp:256: error: expected ‘,’ or ‘;’ before ‘{’ token
make: *** [movie.o] Error 1
g++-c movie.cpp-o movie.o
movie.cpp:在成员函数“void movie::addFirstName(std::string)”中:
movie.cpp:227:错误:在((movie*)this)->movie::directorFirstName=nameFirst.std::basic_string::resize[with _CharT=char,_Traits=std::char_Traits,_Alloc=std::allocator](10u,32)]
/usr/lib/gcc/i386 redhat linux/4.1.2/../../../../../../../../include/c++/4.1.2/bits/basic_string.h:485:注意:候选项为:std::basic_string&std::basic_string::operator=(const std::basic_string&)[带(CharT=CharT,_Traits=std::char)CharT\u Traits,(Alloc=std::分配器]
/usr/lib/gcc/i386 redhat linux/4.1.2/../../../../../../../../include/c++/4.1.2/bits/basic\u string.h:493:注意:std::basic\u string&std::basic\u string::operator=(const\u CharT*)[带_CharT=CharT,_Traits=std::char\u Traits,_Alloc=std::分配器]
/usr/lib/gcc/i386 redhat linux/4.1.2/../../../../../../../../include/c++/4.1.2/bits/basic_string.h:504:注意:std::basic_string&std::basic_string::operator=(_CharT)[带_CharT=char,_Traits=std::CharT=CharT\u Traits,_Alloc=std::分配器]
movie.cpp:在全局范围内:
movie.cpp:240:错误:变量或字段“addLastName”声明无效
movie.cpp:240:错误:“int movie::addLastName”不是“类movie”的静态成员
movie.cpp:240:错误:未在此作用域中声明“string”
movie.cpp:241:错误:预期为“,”或“;”在“{”标记之前
movie.cpp:255:错误:变量或字段“addMovieName”声明无效
movie.cpp:255:错误:“int movie::addMovieName”不是“类movie”的静态成员
movie.cpp:255:错误:未在此作用域中声明“string”
movie.cpp:256:错误:在“{”标记之前应为“,”或“;”
制作:**[movie.o]错误1

您没有为字符串指定正确的名称空间,字符串是std名称空间的成员。在这种情况下,您需要编写std::string,因为我在代码中没有看到“使用名称空间std;”

替换:

string movieName,
       directorLastName,
       directorFirstName,
       directorFullName;
与:


为什么所有的私有字段都是指针?将普通的
int
s和
float
s存储为字段完全可以。此外,您不需要在构造函数中“初始化”字符串。如果不这样做,将自动调用它们的默认构造函数(
string
s将为空)。为什么要填充字符串?即使在显示时需要,也要将其填充到那里。

目前还没有人回答这个问题,所以我想,自从我找到它后,我就把它放在这里了。基本上,我的解决方案是:

在头文件和实现文件中使用std::string


第二,宣言:

stringOne=stringTwo.调整大小(一些数字,”);

…失败,因为
resize()
是一个无效的返回函数。将其替换为两个单独的语句;即:

stringOne = stringTwo;
stringOne.resize(/* blah */);

…解决了其余的错误。感谢@Jesse在评论中提到了这一点。

使用std::string时会出现什么错误?另外,打开查看字符串是如何声明的。有时是“string”是一个别名,根据STL的包使用。你需要使用<名字空间STD >代码>;/>代码>,伙计。你是如何学习C++的?这些是你丢失的非常基本的原则。你确实需要指定<代码> STD::String < /C> >你刚才在代码>字符串> /CUT>的地方,或者使用J-16SDIZ的建议。为什么对那些
int
float
变量使用动态分配?这是一种不常见的做法。
directorFirstName=nameFirst.resize(10,”)
resize返回void,因此此操作也将失败。这确实是一个主要的修复方法。你写此文章时,我正在编辑我的文章。是的,我仔细研究了一下,发现了一些其他主要问题,不确定为什么指针会从我的脑海中溜走……你似乎错过了很多,并且已经(或者你会)完成了许多其他方面的问题。只是想指出代码中错误的地方(即使它们现在起作用)。这是一项大学课程作业。
clear()
语句用于“清除字符串类型属性中的任何剩余数据,”而且是实验室的要求。动态分配变量更多的是为了实践,而不是为了必要性。调整大小是为了响应实验室规范中定义的函数标准。@sunday:我也很想知道为什么要对简单的
int
float
变量使用指针和动态内存分配。手动资源管理器这样的管理是不寻常的,而且容易出错。您知道吗?@sunday:注意,构造函数中有
clear()
语句。当您构造
电影
对象时,没有要清除的“剩余”数据。
string movieName,
       directorLastName,
       directorFirstName,
       directorFullName;
std::string movieName,
            directorLastName,
            directorFirstName,
            directorFullName;
stringOne = stringTwo;
stringOne.resize(/* blah */);