Microsoft c++ 优化编译器已停止工作
Posted
技术标签:
【中文标题】Microsoft c++ 优化编译器已停止工作【英文标题】:Microsoft c++ optimizing compiler has stopped working 【发布时间】:2014-11-24 20:15:32 【问题描述】:我试图在一个类中定义一个模板成员函数,每次我尝试构建此代码时,MSVC 都会崩溃。我不确定这是否是 Visual Studio 2008 中的错误。这是一个最小的示例。
testTemp.h
头文件:
#pragma once
#include <vector>
#include <iostream>
class testTemp
public:
testTemp(void);
~testTemp(void);
template<typename T>
std::vector<T> m_vMonitorVec;
int MonitorSignal(T x, std::vector<T> vec, int len);
;
这里是testTemp.cpp
:
#include "StdAfx.h"
#include "testTemp.h"
testTemp::testTemp(void)
testTemp::~testTemp(void)
template<typename T>
int testTemp::MonitorSignal(T inp, std::vector<T> monVec, int len)
return 0;
而 stdafx.h 是:
#pragma once
#include "targetver.h"
#include <stdio.h>
#include <tchar.h>
我在 MSVC 2008 中运行它,每当我尝试构建此代码时,都会出现以下崩溃:
【问题讨论】:
stdafx.h 中有什么东西吗? @Tim 请看编辑 是的。编译器不应该崩溃,与代码的好坏无关。也许重新安装等有帮助。template<typename T> std::vector<T> m_vMonitorVec;
在我看来很可疑。我不认为你被允许为类字段这样做。如果您删除 m_vMonitorVec
声明,它是否有效?
你为什么要这样做?严重地?怎么样,因为您的编译器正在崩溃,而您正试图找出原因。
【参考方案1】:
模板变量在 c++14 中是新的。 VS2008 肯定没有实现它们。
template <typename T> std::vector<T> m_vMonitorVec;
应该是
template <typename T>
class testTemp
public:
testTemp(void)
~testTemp(void)
int MonitorSignal(T x, std::vector<T> const& vec, int len)
return 0;
private:
std::vector<T> m_vMonitorVec;
;
因此我建议内联实现:Why can templates only be implemented in the header file?
PS 您可以报告编译器错误,但他们不会修复旧版本。
【讨论】:
即使在 c++14 中,类范围内的变量模板也必须是静态的。 @Tim 今天我又学到了一些新东西 :) 这当然很有意义,但我还没有使用过模板变量以上是关于Microsoft c++ 优化编译器已停止工作的主要内容,如果未能解决你的问题,请参考以下文章
Outlook 中的 VBA:“Microsoft Outlook 已停止工作”消息
为啥我收到错误“Microsoft Visual Studio 2012 已停止工作”(当我单击文本框时)[关闭]
安装office2016时弹出microsoft setup bootstrapper已停止工作的解决办法