具有特定长度的向量类

时间:2013-11-18 18:34:38

标签: c++ class vector types

我正在尝试从STL向量创建特定长度的de类向量。 那是我的代码

#include <cmath>
#include <iostream>
#include <cstdio>
#include <cassert>
#include <vector>
#include<complex>


using namespace std;

template <class T, int N>
class KN : public vector<T> {

public:
KN(){T b=0;
  for (int i=0; i<N; i++){(*this).push_back(b);}}

KN(vector<T> a) { for (int i=0; i<N; i++){(*this).push_back(a[i]);}}     

KN & operator +(const KN & v){     
vector<T> sortie;
for(int i=0; i<N; i++)
    {(sortie).push_back((*this)[i]+v[i]);}   
return KN(sortie);  };

friend int conj(const int& x)
{
   return(x);
 };

friend double conj(const double& x)
{
   return(x);
};

T & operator , (const KN & v){
T c();    
for(int i=0; i<N; i++)
{
    c=c+ (*this)[i] * conj(v[i]);
}    
return c;
};

KN & operator * (const T& e){

vector<T> sortie;     
for(int i=0; i<N; i++)
{       
  sortie.pusk_back((*this)[i]* e);     
}    
return KN(sortie);

};   

};      

我正在用这个main.cpp测试我的函数

#include <cmath>
#include <iostream>
#include <cstdio>
#include <cassert>
#include <vector>
#include<complex>
#include "ex3.hpp"

using namespace std;

int main()
{
KN<int,10> vint;
KN<int,10> vint2;

for(int i =0; i<10; i++)
{vint[i]=1;}

for(int i =0; i<10; i++)
{vint2[i]=2;}



for(int i =0; i<10; i++)
cout<<(vint +vint2)[i]<<endl;
cout<<(vint ,vint2)[i]<<endl;
cout<<(vint*2)[i]<<endl;

但我有所有这些错误:

main3.cpp: In function `int main()':
main3.cpp:50: error: name lookup of `i' changed for new ISO `for' scoping
main3.cpp:48: error:   using obsolete binding at `i'
main3.cpp:50: error: invalid types `int[int]' for array subscript

ex3.hpp: In member function `KN<T, N>& KN<T, N>::operator+(const KN<T, N>&) [with T = int, int N = 10]':
main3.cpp:49:   instantiated from here
ex3.hpp:23: error: invalid initialization of non-const reference of type 'KN<int, 10>&' from a temporary of type 'KN<int, 10>'

ex3.hpp: In member function `T& KN<T, N>::operator,(const KN<T, N>&) [with T = int, int N = 10]':
main3.cpp:50:   instantiated from here
ex3.hpp:39: error: pointer to a function used in arithmetic
main3.cpp:50:   instantiated from here
ex3.hpp:39: error: assignment of function `T c() [with T = int, int N = 10]'
ex3.hpp:39: error: cannot convert `int (*)()' to `int ()()' in assignment
main3.cpp:50:   instantiated from here
ex3.hpp:41: error: invalid initialization of non-const reference of type 'int&' from a temporary of type 'int (*)()'
ex3.hpp: In member function `KN<T, N>& KN<T, N>::operator*(const T&) [with T = int, int N = 10]':
main3.cpp:51:   instantiated from here
ex3.hpp:49: error: 'class std::vector<int, std::allocator<int> >' has no member named 'pusk_back'
main3.cpp:51:   instantiated from here
ex3.hpp:51: error: invalid initialization of non-const reference of type 'KN<int, 10>&' from a temporary of type 'KN<int, 10>'
是的,有人可以帮帮我吗?我不知道如何以良好的方式宣布我的职能......

1 个答案:

答案 0 :(得分:1)

for(int i =0; i<10; i++)
cout<<(vint +vint2)[i]<<endl;
cout<<(vint ,vint2)[i]<<endl;
cout<<(vint*2)[i]<<endl;

你错过了循环语句的大括号。


KN(vector<T> a)

这不是你如何声明一个vector-from-vector构造函数。你应该使用:

KN(const vector<T>& a)

请除了重载operator,之外,请另外找到其他方法。你甚至没有做对:你需要返回一个临时的,而不是修改对象并返回对它的引用。

您的代码也会加载拼写错误。请清理一下,更好地解释你在这里要做的事情。


  

如果它是可行的,如果有人告诉我这个功能有什么问题,我会很高兴

KN & operator +(const KN & v) {     
    vector<T> sortie;
    for(int i=0; i<N; i++) {
        (sortie).push_back((*this)[i]+v[i]);
    }   
    return KN(sortie);
};

很多东西。首先,你回来了错误的东西;你没有从+返回引用,你返回一个对象。 1 + 1为您提供int,而不是int&。其次,当您想要返回vector<T>时,您正在创建KN。首先创建一个KN!你的return语句不是类型转换,它是从向量创建一个新对象。这里有很多浪费的行动。

KN<T, N> operator +(const KN<T, N> & v) {     
    KN<T, N> result(*this);
    for(int i=0; i<N; i++) {
        result[i] += v[i];
    }   
    return result;
};

最后,如果你想要一个固定长度的矢量,你应该使用C ++ 11中的std::array模板或Boost中的Boost::array,如果你没有C ++ 11。