Ошибка C4430 при использовании шаблонов в VC ++ - PullRequest
0 голосов
/ 29 февраля 2012

Я не так опытен с шаблонами C ++ и столкнулся с проблемами. Возможно, вы видите глупую ошибку, которую я делаю. Спасибо за вашу помощь!

Constants.h:

#include "stdafx.h"
#include <io.h>
#include <sstream>

class Constants
{
public:
    [...]
    template<typedef const T>
    static CString ToString(T VALUE);
};

Constants.cpp:

template<typedef const T>
CString Constants::ToString(T VALUE)
{
    stringstream ss;

    ss << VALUE;

    CString csRow = ss.str().c_str();

    return csRow;
}

Ответы [ 3 ]

4 голосов
/ 29 февраля 2012

Для дальнейшего использования Переполнения стека скопируйте и вставьте любые и все ошибки компилятора дословно и укажите номера строк в фрагментах кода.


Если вы новичок в C ++, я настоятельно рекомендую вам взять хорошую вводную книгу по C ++ и прочитать ее. Вики-тег C ++ здесь содержит список книг, рекомендованных сообществом C ++ здесь, по переполнению стека.


Существует много проблем с размещенным вами фрагментом кода. Вот что я вижу из визуального осмотра фрагмента:

Измените typedef const T на typename T и переместите определение в заголовок:

class Constants   
{   
public:
    [...]
    template<typename T> 
    static CString ToString(T value); 
    { 
        std::stringstream ss; // Note std:: prefix!
        ss << value; 
        CString csRow = ss.str().c_str(); 
        return csRow; 
    }
};

(Вы также можете использовать class T вместо typename T; в этом случае они оба эквивалентны.)

Убедитесь, что компилятор может видеть определение CString. Возможно, вам придется включить cstringt.h, если stdafx.h этого еще не сделал.

Также обратите внимание, что стандартные типы библиотек находятся в пространстве имен std. Вот почему там есть std::stringstream вместо stringstream. Вы также можете использовать using namespace std;, но никогда не используйте его в заголовочном файле.

Избегайте использования UPPERCASE NAMES для переменных и параметров; они обычно зарезервированы для макросов.

0 голосов
/ 29 февраля 2012

Используйте имя типа или класс вместо typedef

0 голосов
/ 29 февраля 2012
C4430 C++ does not support default-int

Просто проверьте строку, в которой появляется ошибка, и проверьте, не пропустили ли вы какие-либо спецификаторы типов в объявлении переменных или в функциях

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...