类中的字符串 // C++
Posted
技术标签:
【中文标题】类中的字符串 // C++【英文标题】:Strings in classes // C++ 【发布时间】:2011-12-20 21:35:14 【问题描述】:我是 C++ 新手,在类中遇到字符串问题
日期.cpp:
#include "stdafx.h"
#include "Date.h"
#include <sstream>
#include <string>
using namespace std;
Date::Date(int day,int month,int year )
setDate(day,month,year);
void Date::setDate(int day,int month,int year)
this->day = day;
this->month = month;
this->year = year;
string Date::printIt()
std::stringstream res;
res<<this->day<<"/";
res<<this->month<<"/";
res<<this->year;
return res.str;
Date operator+(const Date &date,int day)
Date newDate(date.day,date.month,date.month);
newDate.day += day;
if(newDate.day > 30)
newDate.day%=30;
newDate.month+=1;
if(newDate.month>=12)
newDate.month%=30;
newDate.year+=1;
return newDate;
日期.h:
#ifndef DATE_H
#define DATE_H
using namespace std;
class Date
private:
int day,month,year;
Date()
public:
Date(int day,int month,int year);
void setDate(int day,int month,int year);
string printIt();
friend Date operator+(const Date &date, int day);
;
#endif
问题是printIt()
函数。 Visual Studio 说声明不兼容。当我将函数类型更改为int
时,问题消失了,但为什么string
s 出现问题?
【问题讨论】:
我没有看到您的字符串问题?代码示例是否显示了问题? 您必须在使用之前包含<string>
。编译器会逐行读取文件,不会为你往前看。
永远不要将using namespace
放在标题中,正如前面的评论所说,您需要在Date.h
中添加#include <string>
,然后在std::string printIt();
中添加std::string printIt();
【参考方案1】:
如果Date.h
将使用string
类,则必须在之前 Date.h
或in Date.h
中包含必要的头文件.
【讨论】:
非常感谢您的关心,也感谢其他人。问题是这样的。【参考方案2】:您的问题在于您的包含订单:
#include "stdafx.h"
#include "Date.h"
#include <sstream>
#include <string>
在包含定义string
的标头之前,您将包含Date.h
,其中包含string
。
应该是
#include "stdafx.h"
#include <sstream>
#include <string>
#include "Date.h"
或者更好的是,直接在标题中包含string
。这样您就不必担心可能包含标头的其他 cpp
文件中的顺序。
【讨论】:
您不应该依赖包含头文件的顺序...更喜欢您提供的第二种解决方案。【参考方案3】:您正在返回指向str
成员函数的指针,而不是string
。请致电 str()
以使其正常工作
string Date::printIt()
...
return res.str();//call str method
还需要将#include <string>
移动到头文件,因为string
用于printIt
的返回类型。
【讨论】:
res.str 是否表示方法指针? res::str 不是指针吗?我认为 res.str 会给出不同的错误 - 可能只是一个错字。 嗯...如果您已经编译过,您会发现这不是问题所在。我的意思是这是一个问题,但不是他问题的原因。无论如何,你是对的,不值得 -1,但也不值得 +1,因为它没有回答问题。作为评论,这会更好。 @LuchianGrigore 这里显然有两个问题,我真的怀疑这是一个错字,除非 OP 决定手动输入所有内容,而不仅仅是从编辑器中进行简单的复制和粘贴。答案是 Davids 和我的组合 :),我会将它添加到我的,但 +1 给 Davids【参考方案4】:重新排列标题,使字符串类型声明出现在 Date.h 之前
#include <sstream>
#include <string>
#include "stdafx.h"
#include "Date.h"
【讨论】:
以上是关于类中的字符串 // C++的主要内容,如果未能解决你的问题,请参考以下文章