首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++错误C2819:类型'List'没有重载成员'operator - >'

您好!您提到的C++错误C2819是一个编译错误,表示编译器无法找到重载的“->”操作符。这个错误通常发生在尝试访问一个类的成员时,但编译器无法确定该类的定义。

要解决这个问题,您需要确保您已经正确地定义了类,并且在访问该类的成员时使用了正确的语法。以下是一些可能导致C2819错误的常见原因:

  1. 类定义中缺少重载的“->”操作符。您可以通过在类定义中添加重载的“->”操作符来解决此问题。例如:
代码语言:txt
复制
class List {
public:
    int operator->() {
        // 返回指向List对象的指针
    }
};
  1. 在访问类成员时使用了错误的语法。您需要确保您使用了正确的语法来访问类的成员。例如,如果您有一个名为“myList”的List对象,您可以使用以下语法访问其成员:
代码语言:txt
复制
myList->member;
  1. 类定义中存在语法错误或拼写错误。您需要检查类定义中是否存在语法错误或拼写错误,并进行修复。

如果您仍然遇到问题,请提供更多关于您的代码的详细信息,以便我们能够更好地帮助您。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 类和对象:运算符重载

    前言: 在C++中,运算符重载是一种强大的特性,它允许我们重新定义已有的运算符,以便用于用户自定义的数据类型。...运算符重载的语法 函数原型:**返回值类型 operator操作符(参数列表)** 注意: 不能通过连接其他符号来创建新的操作符:比如operator@ 重载操作符必须有一个类类型参数 用于内置类型的运算符..._day; } 用d1.operator(d2)或者d1 == d2都可以实现; 由于在类外实现重载,所以没有this指针,所以可以用类内,但是C++的语法会对此进行优化直接使用d1 == d2也可以完成...全局函数没有 this 指针,因此无法进行这种检查。 语法要求:C++ 语法要求赋值运算符 = 必须是类的成员函数。尝试将其定义为非成员函数会导致编译错误,因为编译器期望赋值运算符是类的成员。...这是为了保持语言的一致性和防止潜在的错误使用。 因此,当尝试将赋值运算符重载为全局函数时,编译器会报错,因为它违反了C++的规则和赋值运算符的预期行为。

    10210

    C++】模拟实现list

    ()函数 list的size()函数 listoperator=运算符重载函数 注意,因为我们要实现的list类并不只满足于只能存储一种固定类型的元素,我们在一个项目中,可能会创建几个存储不同类型元素的...C++的forward_list、unordered_map、unordered_set等数据结构的迭代器都可以被视作单向迭代器。 特点: 只能向前移动,即只能进行++操作。 没有回退功能。...= _node->_next; return *this; } 实现后置operator++重载函数 迭代器后置++的功能是使迭代器指向下一个链表结点,并返回链表没有++前的结点,要指向下一个结点..._node; } 实现operator->重载函数 我们先来看一下下面代码里库里的list的使用上有没有什么特别的地方: 可以看到,对迭代器it而言,下面两行代码的结果是一样的...综上所述,list迭代器部分完整代码如下: //迭代器的本质是通过自定义类型的封装,改变了类型的行为 //内置类型的行为不符合我们的要求时,C++就可以用一个类来封装这个类型,然后自己定义这个类型的行为

    7910

    C++ 运算符重载

    C++实现可变长度的动态数组 6. C++重载>(C++重载输出运算符和输入运算符) 7. C++重载()(强制类型转换运算符) 8. C++重载++和--(自增和自减运算符) 9....2 C++重载=(C++重载赋值运算符)  赋值运算符=要求左右两个操作数的类型是匹配的,或至少是兼容的。有时希望=两边的操作数的类型即使不兼容也能够成立,这就需要对=进行重载。...C++ 规定,=只能重载成员函数。来看下面的例子。...String 类没有编写参数类型为 char * 的构造函数,因此编译不能通过。 就上面的程序而言,对 operator= 函数的返回值类型没有什么特别要求,void 也可以。...7 C++重载()(强制类型转换运算符)  在 C++ 中,类型的名字(包括类的名字)本身也是一种运算符,即类型强制转换运算符。

    1.1K20

    C++ 运算符重载

    C++实现可变长度的动态数组 6. C++重载>(C++重载输出运算符和输入运算符) 7. C++重载()(强制类型转换运算符) 8. C++重载++和--(自增和自减运算符) 9....2 C++重载=(C++重载赋值运算符)  赋值运算符=要求左右两个操作数的类型是匹配的,或至少是兼容的。有时希望=两边的操作数的类型即使不兼容也能够成立,这就需要对=进行重载。...C++ 规定,=只能重载成员函数。来看下面的例子。...String 类没有编写参数类型为 char * 的构造函数,因此编译不能通过。 就上面的程序而言,对 operator= 函数的返回值类型没有什么特别要求,void 也可以。...7 C++重载()(强制类型转换运算符)  在 C++ 中,类型的名字(包括类的名字)本身也是一种运算符,即类型强制转换运算符。

    1.2K00

    C++输入输出操作符重载

    2.重载的原因 应用于基本类型的输入、输出操作都已经在C++标准库中定义好,没有必要重新定义,也不允许重新定义。...3.重载的形式 对输出操作<<进行重载,只能采用友元函数的形式进行,而不能将operator<<()申明为ostream类的成员函数。...这种函数重载,既安全又高效。 对于输入操作符>>进行重载,也是能采用友元函数的形式进行,而不能讲operator>>()申明为istream类的成员函数。...(1)对于输入输出操作符进行重载,只能采用友元函数的形式,而不能采用成员函数的形式,原因前面已经讲述。...原因是istream类和ostream类的拷贝构造函数被申明为私有(private)成员,这样实际上就阻止了istream类型和ostream类型的参数的传值行为,也就阻止了他们成为函数的返回值。

    71520

    60秒问答:多态和函数重载的关系?

    父类函数被隐藏 ELSE IF 子类函数与父类函数的名称相同&&参数也相同&&但是父类函数有virtual 父类函数被覆盖 C++名字隐藏机制例子1 全局:重载3个operator new new 是可以被重载的...: 直接回答隐藏无法避免是错误的,没有区分 参数相同,参数不同。...如果没有using声明,派生类中的成员函数将隐藏整个继承的重载集。...点评: 这个想法是错误的,一看就没有经过验证,这个认知要纠正 C++11 中的 override 关键字,可以显式的在派生类中声明,哪些成员函数需要被重写,如果没被重写,则编译器会报错。...C++ 函数类型自动转化 与二义性【成功就匹配,不然就是错误】 函数传递过程中, 参数 如果是基本类似,发生自动转换。

    1.4K10

    C++ 内存管理(一)

    没有所谓的operator delete ,因为placement new根本没有分配memory。 5.重载 5.1 C++内存分配的途径 ?...如果是在类中重载operator new()方法,那么该方法有N多种形式,但必须保证函数参数列表第一个参数是size_t类型变量;对于operator delete(),第一个参数必须是void* 类型...C++ 的类有四类特殊成员函数,它们分别是:默认构造函数、析构函数、拷贝构造函数以及拷贝赋值运算符。这些类的特殊成员函数负责创建、初始化、销毁,或者拷贝类的对象。...如果程序员没有显式地为一个类定义某个特殊成员函数,而又需要用到该特殊成员函数时,则编译器会隐式的为这个类生成一个默认的特殊成员函数。...class X { public: X() = default; } "=default"函数特性仅适用于类的特殊成员函数,且该特殊成员函数没有默认参数。

    1.5K30

    运算符重载(超详细)

    原地址点击打开链接 1.运算符重载定义: C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。...这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C++的可扩展性,也是C++最吸引人的特性之一。...(6) 运算符重载是针对新类型数据的实际需要对原有运算符进行的适当的改造,重载的功能应当与原有功能相类似,避免没有目的地使用重载运算符。...1) 成员函数运算符  运算符重载为类的成员函数的一般格式为: operator () { } 当运算符重载为类的成员函数时,函数的参数个数比原来的操作数要少一个...2) 友元函数运算符  运算符重载为类的友元函数的一般格式为: friend operator () { } 当运算符重载为类的友元函数时,由于没有隐含的

    87020

    C++查缺补漏

    ,其中 oprd1 为A 类对象,则 B 应被重载为 A 类的成员函数,形参类型应该是 oprd2 所属的类型重载后,表达式 oprd1 B oprd2 相当于 oprd1.operator B(oprd2...经重载后,表达式 U oprd 相当于 oprd.operator U() 后置单目运算符 ++和--重载规则 如果要重载 ++或--为类成员函数,使之能够实现表达式 oprd++ 或 oprd-- ,...++和--重载后,表达式 oprd B等同于operator B(oprd,0 ) //重载Complex的加减法和“<<”运算符为非成员函数 //将+、-(双目)重载为非成员函数,并将其声明为复数类的友元...(int i) const; //重载"[]”常函数 operator T * (); //重载到T*类型的转换 operator const T * () const...,将Array类的对象名转换为T类型的指针 template Array::operator T * () { return list; //返回当前对象中私有数组的首地址

    2.5K10

    C++初阶】list的模拟实现 附源码

    二.list模拟实现思路 既然是用C++模拟实现的,那么一定要封装在类里。 为了适合各种类型的数据,会使用模板。...的迭代器在表面上和 string,vector 的迭代器用起来没有区别,我们在底层上就需要用类封装迭代器,然后再迭代器类的内部,重载 ++ -- * -> !...main() { test_list(); return 0; } 有时候,实例化的模板参数是自定义类型,我们想要像指针一样访问访问自定义类型力的成员变量,这样显得更通俗易懂,所以就要重载 ->...运算符,它的返回值是 T* ,但是正常来说这里应该是这样访问的: it -> -> _a1 因为迭代器指向的是 整个自定义类型,要想再访问其内部成员应该再使用一次 -> (这个->就不是重载的 ->...list_iterator(Node*node) //构造函数,单参数的构造函数支持隐式类型转换 :_node(node) {} //重载 * ++ -- !

    11910

    C++从入门到精通——const与取地址重载

    前言 类的6个默认成员函数:如果一个类中什么成员没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。...默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。 class Date {}; 一、const 正常用法 在C++中,可以使用const关键字来声明一个常量成员。...在C++中,对于指针类型,可以重载取地址操作符(&)来返回指针的地址。但是,const修饰符的存在可能导致取地址操作符无法重载。...operator& return 0; } 输出结果为: Non-const operator& Const operator& 在上述代码中,类MyClass重载了取地址操作符(&)...当使用非const指针时,调用非const版本的operator&;而当使用const指针时,调用const版本的operator&。 通过重载取地址操作符,我们可以根据指针的类型选择合适的操作。

    14310

    C++重载操作符

    重载操作符其实也是一种形式的多态,因此只能重载C++本身有的操作符,而且只能按照C++本身有的操作方式来使用,比如你对于“-”号,可以重载来用于两个对象相减,或者用于表示一个对象求负,但是你不能重载一个...“@”号来用于两个对象相加,因为C++本身就没有这种用法。...重载的方法非常简单: // 形式如下: operator op(argument-list) // 比如原型: Time oprator+(const Time &t);// 这实际上就是重载一个Time...那如果我把int类型的值放在第一个呢?类似这样: Time time3 = 1 + time1; 这会报错的,因为int类型没有一个方法可以去调用Time类型参数的加法。...&t) // 实现(注意没有::限定符): Time operator+(int h, const Time &t) { // 把时间加一个小时 // 依然返回Time类型时间 } //

    32020

    关于C++中操作符重载的疑问 :四个运算符=, ->, [], ()不可以重载为全局函数(友员函数)

    在此,我们可以对C++规则做出以下的判断:   当类中没有定义赋值运算符重载成员函数时(注意,在未定义形参数据类型为该类类型的赋值运算符重载函数时,编译器会自动生成加入),当程序执行到某一赋值语 句时,...那么当把赋值运算符重载为类的友员函数,在程序中执行类对象的赋值语句时,程序就会出现两种矛盾的选择。 1、因为它认为类中并没有重载赋值运算符的成员函数,所以它根据C++的规则,会去调用相应的构造函数。...2、但是在全局里,我们已经重载了参数类型为此类类型的赋值运算符函数,而这赋值语句刚好和这函数匹配上了,根据C++的规则,也会去调用这函数。...即编译器发现当类中没有定义这3个运算符的重载成员函数时,就会自己加入默认的运算符重载成员函数。...例当类A中没有定义运算符->的重载成员函数,但是我们仍然可以对类A对象指针用->的形式调用指针指向的对象里的成员

    99620

    C++20初体验——concepts

    list; std::sort(list.begin(), list.end()); } GCC 10.1.0给出如下错误信息(没有开-std=c++20): In file included...我们注意到两段错误都提到了operator-,实际上编译器认为错误在于std::sort中会把两个输入迭代器所属类型的实例相减,而std::list::iterator没有重载operator-运算符...然后对于上面那个错误,编译器会说:“std::random_access_iterator::iterator>不成立”(尽管目前我还没有体验过这种编译器)。...如果模板参数代入时出现了不存在的类型或变量,该约束仅仅是不被满足,而不会产生编译错误。 约束可以用于函数模板、类模板和成员函数,非模板类的非模板成员函数除外。...的模板类型发生错误,根据SFINAE,该重载被忽略;与此同时第二个是可用的。

    1.4K10

    C++打怪升级(五)- 类和对象入门2

    一个类中没有写任何成员函数时编译器会自动生成默认成员函数。 默认成员函数是我们设计类时没有显式实现,而编译器自动生成的成员函数。 默认成员函数对于我们来说是隐式的、不可见的,但确实是存在的。...0; 首先C++类型分为了内置类型和自定义类型。...,即初始化是有自定义类型本身的构造函数完成的,默认构造函数只是简单的调用; 对于内置类型成员变量,C++没有规定默认构造函数是否需要对内置类型变量进行初始化,于是乎大多数编译器都选择了不对内置类型进行初始化...---- 运算符重载函数 概念 C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其 返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似 格式...在C语言中不能实现,C++中引入了运算符重载函数来实现这样的想法: //c++引入,但是在类外不能访问到私有成员变量了,除了友元函数 bool operator==(const Date& d1, const

    77520

    C++list迭代器的深度剖析及模拟实现(感受类封装,类和对象的思想)

    SGI版本下,list迭代器是自定义类型,vector迭代器是内置类型,所以vector迭代器的解引用就是原生指针的解引用,而list迭代器的解引用是类里面operator*运算符重载的函数调用,如果不重载解引用则解引用返回的是结点...这个时候就能体现出C++类的独特价值所在,内置类型解引用确实可以直接拿到数据,但自定义类型却不能通过解引用拿到数据,但是我们有类啊!类里面的运算符重载的实现不就是我们说了算吗?...//1.我们可以重载Pos的流插入运算符2.或者直接访问*it所属类的成员变量 //C++搞流插入运算符重载,是为了支持自定义类型更好的输出。...对于内置类型,初始化列表不会处理,但如果你在初始化列表显示写了,那就用显示写的进行初始化,如果没有写,在成员变量声明处有缺省值就用缺省值,没有就用编译器不处理内置类型的随机值。 3....迭代器类我们没有写析构函数,则会调用编译器默认生成的析构函数,而默认的析构不会处理内置类型为结构体指针的成员变量,所以结点的空间就不会被释放。

    94410

    C++】侯捷C++面向对象高级编程(下)

    是否有operator+(double,Fraction),重载了+号。 没有,则看能否将f转换为double。找到了operator double()const。 于是f变成了0.6。...示例——标准库中的list迭代器 foo即data 注意与上面智能指针重载运算符的对比。 说明: 左边方框中的内容等同于右边话蓝线的部分。...补充:C++ Upcast(向上造型) up-cast为向上构造 down-cast为向下构造 ---- 模板特化(specialization) 全特化 泛化的反面就是特化 泛化(又叫全泛化)指的是用的时候指定类型...根据特定的类型进行特殊处理,类似于函数重载。...---- 重载member operator new/delete 一个对象 ---- 重载member operator new[]/delete[] 数组 ---- 示例 若无成员函数就调用

    66220

    C++编程语言中重载运算符(operator)介绍「建议收藏」

    本文主要介绍在 C++ 编程语言中使用关键字 operator 重载运算符(也称“重载操作符”)的相关知识,同时通过示例代码介绍使用关键字 operator 重载运算符的具体方法。...1 概述 1.1 What operatorC++ 的一个关键字,它和运算符(如 =)一起使用,表示一个运算符重载函数,在理解时可将 operator 和待重载的运算符整体(如 operator=...使用 operator 重载运算符,是 C++ 扩展运算符功能的方法。...1.3.1 运算符重载实现为类的成员函数 在类体中声明(定义)需要重载的运算符,声明方式跟普通的成员函数一样,只不过运算符重载函数的名字是“operator紧跟一个 C++ 预定义的操作符”,示例用法如下...,则运算符必须被重载为全局函数; C++ 要求’=’、'[]’、'()’、’->’运算符必须被定义为类的成员函数,把这些运算符通过全局函数进行重载时会出现编译错误; 如果有一个操作数是类类型(如 string

    3.1K31
    领券