【问题标题】:Microsoft c++ optimizing compiler has stopped workingMicrosoft c++ 优化编译器已停止工作
【发布时间】: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&lt;typename T&gt; std::vector&lt;T&gt; m_vMonitorVec; 在我看来很可疑。我不认为你被允许为类字段这样做。如果您删除 m_vMonitorVec 声明,它是否有效?
  • 你为什么要这样做?严重地?怎么样,因为您的编译器正在崩溃,而您正试图找出原因。

标签: c++ visual-studio templates


【解决方案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 今天我又学到了一些新东西 :) 这当然很有意义,但我还没有使用过模板变量
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-08
  • 1970-01-01
  • 2012-10-12
  • 1970-01-01
  • 1970-01-01
  • 2014-02-21
相关资源
最近更新 更多