นู๋ นี่
ฉันกำลังพยายามรวบรวมโค้ดส่วนนี้จาก 'ภาษาการเขียนโปรแกรม C++' ของ Bjarne Stroustrup แต่ CodeBlocks ยังคงส่งข้อผิดพลาดนี้ให้ฉันต่อไป
รหัสนี้เกี่ยวกับการตรวจสอบช่วงอาร์เรย์ที่อยู่ในฟังก์ชันเวกเตอร์
นี่คือรหัส:
#include <iostream>
#include <vector>
#include <array>
using namespace std;
int i = 1000;
template<class T> class Vec : public vector<T>
{
public:
Vec() : vector<T>() { }
T& operator[] (int i) {return at(i); }
const T& operator[] (int i) const {return at(i); }
//The at() operation is a vector subscript operation
//that throws an exception of type out_of_range
//if its argument is out of the vector's range.
};
Vec<Entry> phone_book(1000);
int main()
{
return 0;
}
ข้อผิดพลาดที่ส่งคืนคือ:
- ไม่มีข้อโต้แย้งสำหรับ 'at' ที่ขึ้นอยู่กับพารามิเตอร์เทมเพลต ดังนั้นจึงต้องมีการประกาศ 'at'
- หมายเหตุ: (หากคุณใช้ '-fpermissive' G++ จะยอมรับรหัสของคุณ แต่การอนุญาตให้ใช้ชื่อที่ไม่ได้ประกาศนั้นเลิกใช้แล้ว
- ในฟังก์ชันสมาชิก 'const T& โอเปอเรเตอร์[] (int i) const':
- ไม่มีข้อโต้แย้งสำหรับ 'at' ที่ขึ้นอยู่กับพารามิเตอร์เทมเพลต ดังนั้นจึงต้องมีการประกาศ 'at'
- ไม่มีการประกาศ 'รายการ' ในขอบเขตนี้
- อาร์กิวเมนต์เทมเพลต 1 ไม่ถูกต้อง
- ประเภทที่ไม่ถูกต้องในการประกาศก่อนโทเค็น '('
ใครสามารถอธิบายเรื่องนี้ให้ฉันฟังได้ไหม
นอกจากนี้ ฉันจะใช้สิ่งนี้ได้อย่างไรหากฉันจะไม่ใช้ 'using namespace std;'
std::
หน้าชื่อทุกชื่อที่มาจากnamespace std
เช่น เขียนstd::vector
ทุกที่ หรือเขียนusing std::vector
หนึ่งครั้ง (แทนที่จะเป็นnamespace
เพียงระบุชื่อบุคคลทั้งหมดที่คุณใช้) - person MSalters   schedule 01.04.2015