Microsoft c ++优化编译器已停止工作

Sam*_*mer 1 c++ templates visual-studio

我试图在类中定义模板成员函数,每次我尝试构建此代码时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);
};
Run Code Online (Sandbox Code Playgroud)

这是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;
    }
Run Code Online (Sandbox Code Playgroud)

和stdafx.h是:

#pragma once

#include "targetver.h"

#include <stdio.h>
#include <tchar.h>
Run Code Online (Sandbox Code Playgroud)

我在MSVC 2008中运行它,每当我尝试构建此代码时,我都会遇到以下崩溃: 在此输入图像描述

seh*_*ehe 5

模板变量是c ++ 14中的新变量.VS2008当然不会实现它们.

template <typename T> std::vector<T> m_vMonitorVec;
Run Code Online (Sandbox Code Playgroud)

应该是的

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;
};
Run Code Online (Sandbox Code Playgroud)

我建议使用内联实现:为什么模板只能在头文件中实现?


PS您可以报告编译器错误,但他们不会修复旧版本.

  • 即使在c ++ 14中,类范围内的变量模板也必须是静态的. (2认同)