2014-12-07 2 views
1

Я пытаюсь перенести проект с VS2008 на VS2013, Проект компилируется и работает в VS2008, к сожалению, я вдруг получил «Внутренняя ошибка произошла в компиляторе» при компиляции того же код с VS2013. Ошибка возникает при попытке на вызов метода класса шаблонаошибка внутреннего компиляции при использовании класса шаблона

void func(const CMatrix<CSegment>& segments) const 
{ 
    int row, col; 
    row = segments.NumOfRows(); //error points to here 
    col = segments.NumOfColumns(); // if I remove the above line then the error points to here 
} 

и CMatrix определяется следующим образом:

class CBaseMatrix 
{ 
public: 
    CBaseMatrix() {}; 
    virtual ~CBaseMatrix() {}; 
    virtual void Resize(const int row, const int col) = 0; 
    virtual inline int Size() const = 0; 
    virtual inline int NumOfColumns() const = 0; 
    virtual inline int NumOfRows() const = 0; 
}; 


template <class T> 
class CMatrix : public CBaseMatrix 
{ 
public: 

    CMatrix() : 
    m_rawBuff(0), 
    m_rawBuffSize(0), 
    m_columns(0), 
    m_rows(0), 
    m_data(0) 
    {}; 

CMatrix(const CMatrix& matrix): 
{ 
    *this = matrix; 
}; 

    inline int NumOfColumns() const {return(m_columns);}; 

    inline int NumOfRows() const {return(m_rows);}; 

    inline int Size() const {return(m_data.size());}; 

private: 
    int m_columns; 
    int m_rows; 
    vector<T> m_data; 
    T* m_rawBuff ; 
    int m_rawBuffSize ; 

}; 

я не могу найти какие-либо проблемы с кодом, а сама ошибка не очень информативно.

Надеюсь, что я что-то пропустил или кто-то столкнулся с подобной проблемой и имеет идею, как ее решить.

Спасибо.

+0

Ваш фрагмент очень неадекватен. Что такое «CSegment»? Что такое «сегменты»? –

+0

сегменты - это аргумент функции, я опечатал ее, изменил ее сейчас. имеет для CSegment, не имеет значения, что это такое? – Shperb

+0

Сохраните свой код, чтобы вы могли подать сообщение об ошибке –

ответ

1

Ну, я узнал, что эта проблема, обратите внимание, что в исходном коде:

CMatrix(const CMatrix& matrix): 
{ 
    *this = matrix; 
}; 

У меня есть «:» после того, как конструктор, но список инициализации пуст, Как-то, что вызвало компилятор раздавить.

после их удаления:

CMatrix(const CMatrix& matrix) 
{ 
    *this = matrix; 
}; 

все работает!

Обратите внимание, что я отправил сообщение об ошибке Microsoft, и, надеюсь, они позаботятся об этом в следующем обновлении, но в то же время я оставляю свое решение здесь, если кто-то еще столкнется с этой проблемой.

2

Я понятия не имею, как код будет работать под любым компилятором как:

void func(const CMatrix<CSegment>& segment) const 
{ 
    int row, col; 
    row = segments.NumOfRows(); //error points to here 
    col = segments.NumOfColumns(); 
} 

перевалов в переменной называется сегмент, а код пытается получить доступ один называется сегмент ь.

Попробуйте изменить имя параметра на сегменты.

+0

его плохое, должно было сказать «сегменты», я исправил его сейчас, должно быть, был удален в сообщении без моего уведомления – Shperb

Смежные вопросы