在发布模式下编译时出现以下错误。

1>d:\users\eyal\projects\code\yalla\core\src\runbox\win32\window.cpp : fatal error C1001: An internal error has occurred in the compiler.

1> (compiler file 'f:\dd\vctools\compiler\utc\src\p2\main.c', line 249)

1> To work around this problem, try simplifying or changing the program near the locations listed above.

1> Please choose the Technical Support command on the Visual C++

1> Help menu, or open the Technical Support help file for more information

1> link!RaiseException()+0x48

1> link!CxxThrowException()+0x65

1> link!std::_Xout_of_range()+0x1f

1> link!InvokeCompilerPass()+0x1b4e2

1> link!InvokeCompilerPass()+0x22efe

1> link!InvokeCompilerPass()+0x2332e

1> link!InvokeCompilerPass()+0x232f9

1> link!InvokeCompilerPass()+0x233cb

1> link!InvokeCompilerPass()+0x22b04

1> link!InvokeCompilerPass()+0x22d86

1> link!DllGetC2Telemetry()+0x115837

1>

1> 1>

1>LINK : fatal error LNK1257: code generation failed我正在使用VS2015 Update 2 RC。

我不确定,但也许这是优化器中的错误?

导致它的代码如下所示:

在window.h

class Window {

public:

Window();

~Window();

void show();

void hide();

private:

class NativeControl;

std::unique_ptr _window;

};window.cpp

class Window::NativeControl : public NativeWindow {

public:

NativeControl() : NativeWindow() { }

};

Window::Window()

: _window(std::make_unique<:nativecontrol>()) {

}

Window::~Window() {

}

void Window::show()

{

_window->show(WindowShowMode::Show);

}

void Window::hide()

{

_window->show(WindowShowMode::Hide);

}NativeWindow是任何操作系统的本地窗口。

以下是使用GCC 5.1编译的工作代码:https://ideone.com/4YvjRK

只是做一个笔记。

如果我将删除继承并将其替换为这样的东西。

class Window::NativeControl {

public:

void show(WindowShowMode showMode)

{

}

};它会正常工作!

这里是与GCC 5.1编译相同的代码,没有继承:https://ideone.com/Mu0A42

似乎导致此行为的原因是从NativeWindow派生NativeControl。

重现它的步骤如下:

从Window类中删除dtor声明和定义。

尝试构建(不重建)。

编译器会抱怨并给你一堆错误。

1>C:\Program Files (x86)\Microsoft Visual Studio

14.0\VC\include\memory(1194): error C2338: can't delete an incomplete type 1> 1> 1>C:\Program Files (x86)\Microsoft Visual Studio

14.0\VC\include\memory(1195): warning C4150: deletion of pointer to incomplete type 'Yalla::Window::NativeControl'; no destructor called

1>

d:\Users\Eyal\Projects\Code\Yalla\core\src\runbox\include\window.h(13):

note: see declaration of 'Yalla::Window::NativeControl' 1>

window.cpp 1> 1>Build FAILED.

将dtor添加回Window类。

重新构建(不重建)。

此时,编译器应该抱怨以下错误“致命错误C1001:编译器发生内部错误。”

有趣的部分是做重建似乎解决了这个问题!

我想要实现的基本上是将NativeWindow的实际实现放在不同的文件中,主要是为了简单起见,而不是关于可重用性。

我想这不是在继承中做的,也许会让unique_ptr模板混淆,我也可以通过组合来做到这一点,并通过getter公开NativeWindow的实例,它可能会工作,但问题是是否有更好的方法来做到这一点?

我在很长一段时间后重新学习C++,我没有碰它,所以如果我所做的一些事情没有意义,请告诉我!

更新:

C++标准说:

unique_ptr的模板参数T可能是一个不完整的类型。

我在Herb Sutter的blog上发现了一篇关于它的文章。

c语言编译器内部错误,C++致命错误C1001:编译器中发生内部错误相关推荐

  1. GDI+ 中发生一般性错误(生成验证码时出现的错误)

    我在生成验证码时,出现这样的错误:GDI+ 中发生一般性错误. 怎么解决? 转载于:https://www.cnblogs.com/happyangle/archive/2008/06/11/1217 ...

  2. GDI+中发生一般性错误

    在PictureBox中有一副图,希望保存成图片,用 pictureBox1.Image("c:\\aa.jpg",System.Drawing.Imaging.ImageForm ...

  3. GDI+ 中发生一般性错误

    使用Chartlet时打开页面跳出以下错误: "/"应用程序中的服务器错误. GDI+ 中发生一般性错误. 说明: 执行当前 Web 请求期间,出现未处理的异常.请检查堆栈跟踪信息 ...

  4. Image.Save()发生“GDI+ 中发生一般性错误”

    从数据库中读取的图片是byte[]类型,将其转换成Image可以正常显示,但是调用image.Save()时会发生"GDI+ 中发生一般性错误". public static Sy ...

  5. GDI+中发生一般性错误的解决办法 from http://www.cnblogs.com/winzheng/archive/2008/12/23/1360440.html...

    GDI+中发生一般性错误的解决办法 这个错误经常发生,代码如下:    private  static  byte[] GetBytes (Image image)         {         ...

  6. GDI+中发生一般性错误的解决办法(转帖)

    今天在开发.net引用程序中,需要System.Drawing.Image.Save 创建图片,debug的时候程序一切正常,可是发布到IIS后缺提示出现"GDI+中发生一般性错误" ...

  7. GDI+中发生一般性错误 以及发布时候需要配置的文件

    mxcms在本地测试完毕.搬家到服务器上,修改测试数据新闻的时候,提示"GDI+中发生一般性错误". 找了下,发现是缩略图的原因. 解决方法:将缩略图文件夹里的文件全部删除. fi ...

  8. GDI+ 中发生一般性错误(在 OutputStream 中保存 PNG 格式图像时遇到的问题)

    在将图片以 PNG 格式保存至 Response.OutputStream 时,会碰到如下错误: GDI+ 中发生一般性错误. 原因: 在写 PNG 格式的图像时,指针需要在存储的位置来回移动.而 R ...

  9. C#界面设计--5--Bitmap.save保存图片时: GDI+ 中发生一般性错误 解决办法

    Bitmap.save保存图片时: GDI+ 中发生一般性错误 解决办法 源程序: var date = DateTime.Now.ToString("yyyy-MM-dd");/ ...

  10. GDI+ 中发生一般性错误。

    GDI+ 中发生一般性错误. "/wechat"应用程序中的服务器错误. GDI+ 中发生一般性错误. 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息, ...

最新文章

  1. 值得深思的问题——分库分表就能无限扩容吗?
  2. 终于有人把分布式事物TCC讲明白了
  3. 8、计算机图形学——纹理的相关问题及解决办法
  4. 接到一个新需求:手机照片视频存储及备份需求整理及分析
  5. 质量兴农战略规划-农业大健康·韩长赋:质量效益和竞争力
  6. Wifi模块—源码分析Wifi热点扫描2(Android P)
  7. Yslow-23条规则
  8. Windows配置tomcat环境
  9. android 仿QQ手机版
  10. 程序员一年稳赚50w,却被群嘲只造改bug!TA说:2020年我的愿望是........
  11. linux 系统性能分析常用命令
  12. 教室录播系统方案_录播教室技术解决方案
  13. 计算机登录界面没有用户显示不出来,win7让administrator账户不出现在登陆界面方法...
  14. win7计算机 我的文档,我的文档在哪,详细教您win7“我的文档”在哪里
  15. S3C2440的中断体系结构
  16. “Physically-Based Rendering for Indoor Scene Understanding Using Convolutional Neural Networks”论文阅读
  17. Chrome插件:请开始你的表演,smartUp手势骚操作
  18. java毕业设计旅游网站设计源码+lw文档+mybatis+系统+mysql数据库+调试
  19. 可计算性、可判定性和可满足性
  20. 定义一个动物类java_Java问题利用接口继承完成对生物、动物、人三个接口的定义,其中生物接口定义呼吸抽象方法,动物接口定义了吃饭和睡觉两个抽...

热门文章

  1. 初识前端——个人总结
  2. MIT研发无人机仓库管理系统,或将帮沃尔玛省下几十亿美元
  3. [CF460E]Roland and Rose
  4. mysql忘记root密码恢复
  5. Day12 前端html
  6. 检测IIS应用程序池对象 回收
  7. [转]调试AngularJS应用
  8. 敏捷个人新体系学习 - 2.定位
  9. IOS中UITableView异步加载图片的实现
  10. Linux 操作命令(1)