C++primer中的代码在VS2015中报错

C++primer中的一个关于友元例子,在vs2015中报错定义了两个类Screen和window-mgr,window-mgr作为Screen的友元,但是提示Scree... C++ primer 中的一个关于友元例子,在vs2015中报错
定义了两个类Screen和window-mgr,window-mgr作为Screen的友元,但是提示Screen没有构造函数
#include <iostream>
#include <string>
#include "Window_mgr.h"

using namespace std;

class Screen {
friend class Window_mgr;
public:
typedef string::size_type pos;
Screen(pos ht, pos wd, char c) :height(ht), width(wd), contents(ht*wd, c) {}
Screen() = default;

char get()const
{
return contents[cursor];
}
inline char get(pos ht, pos wd)const;
Screen &move(pos r, pos c);
void some_memeber()const;
Screen &set(char);
Screen &set(pos, pos, char);
Screen &display(ostream &os)
{
do_display(os);
return *this;
};
const Screen &display(ostream &os)const
{
do_display(os);
return *this;
}
private:
pos cursor = 0;
pos height = 0, width = 0;
string contents;
mutable size_t access_ctr;
void do_display(ostream &os)const { os << contents; }
};

inline Screen &Screen::move(pos r, pos c)
{
pos row = r*width;
cursor = row + c;
return *this;

}

inline Screen &Screen::set(char c)
{
contents[cursor] = c;
return *this;

}
inline Screen &Screen::set(pos r, pos col, char ch)
{
contents[r*width + col] = ch;
return *this;
}
#include <iostream>
#include <vector>
#include <string>
#include "Screen.h"
class Screen;

using namespace std;

class Window_mgr
{

public:

using ScreenIndex = vector< Screen>::size_type;
void clear(ScreenIndex);

private:
vector<Screen> screens{ Screen(20, 40, 'x') };/**/报错,提示Screen类没有构造函数**

};
高分求助,谢谢。
展开
 我来答
慕名小妹妹
2016-06-06 · TA获得超过1090个赞
知道小有建树答主
回答量:109
采纳率:0%
帮助的人:115万
展开全部
我没看错的话,你是在两个头文件互相包含并且没有用#ifndef之类的防止重复包含的措施?

包含头文件的意思是把整个头文件复制到 #include这一行,你这种情况不,A包含B,B包含A,A又包含B,不就是无限循环了么。。

只是声明友元,没必要包含头文件,加上#ifndef之类的句子,然后直接注释掉#include "Window_mgr.h" 这句再试试

另外,类的成员提供默认值(Window_mgr里的screens)这一点,因为没用过VS2015,不知道是不是支持,至少VS2015之前的任何版本(比如VS2013)都不支持。
Metaphor90
2016-06-06 · TA获得超过202个赞
知道小有建树答主
回答量:146
采纳率:0%
帮助的人:131万
展开全部

修改后代码如下:

class Window_mgr
{

public:

using ScreenIndex = vector< Screen>::size_type;
void clear(ScreenIndex);

private:
vector<Screen> screens = vector<Screen>{ Screen(20, 40, 'x') };/*报错,提示Screen类没有构造函数***/

};

我的编译器是vs2013,可以通过编译。


原因在这里:

https://msdn.microsoft.com/en-us/library/dn793970.aspx

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
_神游_
2016-06-06 · TA获得超过154个赞
知道小有建树答主
回答量:170
采纳率:0%
帮助的人:57.4万
展开全部
Screen没有对应的构造函数,跟你之前写的两个构造函数都对不上
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2016-06-06
展开全部
printf("数组元素[%d]=%d\n");改成printf("数组元素[%d]=%d\n",i,*xx[5]);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式