2014-11-24 602 views
1

我想在类中定义模板成员函数,并且每次尝试构建此代码时MSVC崩溃。我不确定这是否是Visual Studio 2008中的一个错误。下面是一个简单的例子。微软的C++优化编译器已停止工作

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> 

我在2008年MSVC运行此,每当我尝试构建此代码,我得到以下崩溃: enter image description here

+0

stdafx.h中是否有任何内容? – 2014-11-24 20:17:40

+0

@Tim请参阅编辑 – Samer 2014-11-24 20:19:06

+3

是的。编译器不应该*崩溃*,独立代码的好坏。也许重新安装等帮助。 – deviantfan 2014-11-24 20:19:08

回答

5

模板变量在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你可以报一个编译器错误,但他们不会修复那个旧版本。

+2

即使在C++中,类范围中的14个变量模板也必须是静态的。 – 2014-11-24 21:02:26

+1

@Tim我今天又学到了一些新东西:)它当然有很多意义,但我从未使用过模板变量 – sehe 2014-11-24 21:30:55