gpt4 book ai didi

c++ - C : var was not declared in this scope

转载 作者:行者123 更新时间:2023-11-27 22:58:27 24 4
gpt4 key购买 nike

我正在尝试让我的数组包装器类进行编译,但我是 c++ 的新手。我不断收到与最后一个功能相关的一系列信息:

第 81 行在没有参数列表的情况下无效使用模板名称“warray”

第 81 行ISO C++ 禁止声明非类型的“参数”

第 81 行 之前应有错误 ',' 或 '...'

第 83 行rhs 未在此范围内声明

最后,第 86 行rhs 未在此范围内声明

这个功能太让人迷惑了,我想我完全正确地实现了它。

IDK!请帮忙!

#ifndef WARRAY

#define WARRAY
#include <iostream>
#include <stdexcept>

template <typename T>

class warray {
private:
unsigned int theSize;
T* theData;
public:
//will default to a size of 10 - bump to 10 if below
warray(unsigned int size = 10){
if(size < 10){
size = 10;
}

theSize = size;
theData = new T[theSize];
}

//copy
warray(const warray &rhs):theSize(rhs.theSize){
theData = new T[theSize];
//use assignment*this = rhs;
*this = rhs;
}

//assignment
warray & operator=(const warray &rhs){
//only resize array if lhs < than rhs//this also remedies
if(theSize < rhs.theSize){
delete [] theData;
theData = new T[rhs.theSize];
}
theSize = rhs.theSize;
for(unsigned int i = 0; i < theSize; ++i){
(*this);
}
return *this;
}

//destrctor
~warray(){
delete [] theData;
}

//operator+ will concatenate two arrays should be const
warray operator+(const warray &rhs) const{
warray toRet(theSize + rhs.size);
for(unsigned int i = 0; i < theSize; ++i){
toRet[i] = (*this)[i];
}
for(unsigned int i = 0; i < theSize; ++i){
toRet[i+theSize] = rhs[i];
}
return warray();
}

//operator[unsigned T index]
//will index and allow access to requested element
// - two versions, const and non-const
T operator[](unsigned int index) const{
if(index >= theSize){
throw std::out_of_range ("in operator [] ");
}
return theData[theSize];
}

//size
unsigned int size() const{
return theSize;
}
};

std::ostream &operator<< (std::ostream &os, const warray&<T> rhs){
os << "[ ";
for(unsigned i = 0; i < rhs.size()-1; ++i){
os << rhs[i] << " , ";
}
os << rhs[rhs.size() - 1] << " ]";
return os;
}

#endif

最佳答案

这一行:

       T *theData [theSize];

尝试声明一个大小为 theSize 的指针数组,但是theSize不是常量,在编译时未知。您也不想要指向 T 的指针数组,你想要一个指向 T 数组的指针.

改成

       T *theData;

您的代码还有其他问题。例如你的<<运算符需要是一个模板,我不知道是什么 (*this)正在努力实现。

注意:我假设您这样做是出于学习目的,不能简单地使用 vector 。

编辑:“在没有参数列表的情况下无效使用模板名称‘warray’”错误是由 << 引起的运算符(operator)没有 template<typename T>在它的前面。它需要这个来使它成为一个模板函数。

关于c++ - C : var was not declared in this scope,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30179988/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com