Нет экземпляра конструктора --- Соответствует списку аргументов (возможно, проблема с шаблонами) - PullRequest
0 голосов
/ 19 июня 2010

В настоящее время я пытаюсь написать базовую оболочку для библиотеки cml (http://www.cmldev.net/) math) для проекта, над которым я работаю. У меня есть оболочка для векторного класса cml, который имеет один закрытый член

#ifndef VECTOR3_H_
#define VECTOR3_H_

#include "cml\cml.h"
#include <memory>

namespace Math
{
    template<typename T>

    class Vector3
    {
    public:
        Vector3( void ) 
        Vector3(T x, T y, T z); 
        ~Vector3(){};

        //@Function: Set
        //@Description: Set the internals of the vector
        //@Parameters: 3 values x, y, z
        void set(T x, T y, T z);

    private:
        // ------------------------------------------------------------
        // Copy constructor and assignment operator should be private
        Vector3             (const Vector3 &);
        Vector3& operator=  (const Vector3 &);
        //-------------------------------------------------------------

        std::auto_ptr<cml::vector<T, cml::fixed<3, -1>> *m_internalVector ;
    };
}

(Обратите внимание, что я опускал реализации конструкторов, чтобы уменьшить размер)

и в другом файле я использую #defines, чтобы упростить мое слово.

//Vectors
typedef Math::Vector3<float> Vector3f;
//typedef cml::vector2f Vector2f;

typedef Math::Vector3<int> Vector3i;
//typedef cml::vector2i Vector2i;

Теперь моя проблема возникает, когда я пытаюсь использовать Vector3f

Vector3f forwards( 0.0f, 0.0f, 1.0f );

и я получаю ошибку:

"Нет экземпляра конструктора" Math :: Vector3 :: Vector3 [with T = float] '' Соответствует списку аргументов "

Я попытался перейти с auto_ptr на обычный указатель на случай, если это было проблемой с шаблонами, также попытался объявить переменную без использования #define, и возникает та же проблема, я что-то здесь упускаю, потому можно увидеть этот конструктор в моей реализации.

1 Ответ

2 голосов
/ 19 июня 2010

Вы пропускаете ; после конструктора Vector3(void).

(Но я должен признать, что я думал, что это просто опечатка в вопросе, а не обязательно настоящаяпричина проблемы.)

...