无法将参数'int'转换为'char&'

时间:2014-12-07 15:17:22

标签: c++ type-conversion

我收到一个我不理解的编译器错误,并且不知道如何正确处理它。如果有人能就如何解决这个问题向我提出一些建议,我将不胜感激。错误如下:

Error   1   error C2664: 'char myVector<char>::at(T &) const' : cannot convert argument 1 from 'int' to 'char &'

它位于标题代码的第159行,其中显示out << rho.at(n);

驱动:

#include <iostream>
#include "vectorHeader.h"

using namespace std;

int main()
{
const char START = 'A';
const int MAX = 12;

// create a vector of doubles
myVector<char> vectD;

// push some values into the vector
for (int i = 0; i < MAX; i++)
{
    vectD.push_back(START + i);
}

// remove the last element
vectD.pop_back();

// add another value
vectD.push_back('Z');

// test memory management
myVector<char> vectD2 = vectD;
// display the contents
cout << "\n[";
for (int i = 0; i < vectD2.size() - 1; i++)
{
    cout << vectD2[i] << ", ";
}

cout << "..., " << vectD2.last() << "]\n";


system("PAUSE");
return 0;

}

部首:

#include <iostream>
#include <iomanip>
#include <string>
#include <vector>
#include <fstream>
#include <stdexcept>


//Declaring constant
const int VECTOR_CAP = 2;

template <class T>
class myVector
{
private:
//Setting data members
T* vectorData;
int cap;
int numElements;

public:
//Default constructor
//Purpose: Creates a vector
//Parameters: None
//Returns: None
myVector();

//Parameterized constructor
//Purpose: Creates a vector capacity of n
//Parameters: None
//Returns: None
myVector(const T&);

//Copy Constructor
//Purpose: Copy data into vector
//Parameters: myVector object
//Returns: None
myVector(const myVector& copy)
{
    numElements = copy.numElements;
    vectorData = new T [numElements];
    for (int i = 0; i < numElements; i++)
    {
        this->vectorData[i] = copy.vectorData[i];
    }
}

//Destructor
//Purpose:Deletes any dynamically allocated storage
//Parameters: None
//Returns: None
~myVector();

//Size function
//Purpose: returns the size of your vector
//Parameters: None
//Returns: The size of your vector as an integer
int size() const;

//Capacity function
//Purpose: Returns the capacity of the vector
//Parameters: None
//Returns: Maximum value that your vector can hold
int capacity() const;

//Clear function
//Purpose: Deletes all of the elements from the vector and resets its size to zero
// and its capacity to two; thus becoming empty
//Parameters: None
//Returns: None
void clear();

//push_back function
//Purpose: Adds the integer value n to the end of the vector
//Parameters: Takes a integer to be placed in the vector
//Returns: None
void push_back(const T& n)
{
    //If statement to handle if array is full 
    if (numElements == cap)
    {
        //Doubling the capacity 
        cap = cap * VECTOR_CAP;
        //Allocating new array 
        T* newVectorData = new T[cap];
        //Copying data
        for (int i = 0; i < numElements; i++) newVectorData[i] = vectorData[i];
        //Deleting previous data
        delete[] vectorData;
        //Pointing to new data
        vectorData = newVectorData;
    }
    //Storing data
    vectorData[numElements++] = n;
}

//at function
//Purpose: Returns the value of the element at position n in the vector
//Parameters: None
//Returns: Returns your current place with the vector
T at(T&) const;

//assignment
//Purpose: Overload the = operator
//Parameters: The two myVector objects we want to assign
//Returns: The assignment
myVector operator=(const myVector&);

void pop_back();

int last();

myVector operator[](const myVector&);

};

//Independant Functions

template <typename T>
int myVector<T>::capacity() const
{
return cap;
}

template <typename T>
myVector<T> myVector<T>::operator=(const myVector& rho)
{
//Test for assingment
if (this == &rho)
{
    return *this;
}

//Delete lho
delete[] this->vectorData;

//Creating new array to fit rho data
cap = rho.cap;
this->vectorData = new int[cap];

//Copying data
for (int i = 0; i < numElements; i++)
{
    this->vectorData[i] = rho.vectorData[i];
}

    //Returning myVector object
    return *this;
}


template <typename T>
std::ostream& operator<<(std::ostream& out, const myVector<T>& rho)
{
    for (int n = 0; n < rho.size(); n++)
    {
        out << rho.at(n);
    }
    return out;
}

2 个答案:

答案 0 :(得分:3)

正如它在锡上所说的那样。当你有

T at(T&) const;

myVector<char>中,转换为

char at(char&) const;

并且int无法绑定到char的引用。我想你想说

T at(int) const;

或者更好,

T at(std::size_t) const;

因为std::size_t通常(按惯例)用于此类事情。 <{1}}可隐式转换为int,因此也可以正常使用。

答案 1 :(得分:1)

myVector :: at(T&amp;)的声明将模板类型作为参数。您需要将其声明为

T at(unsigned int&) const

这样你可以将参数用作索引。