当前位置: 首页 > 知识库问答 >
问题:

编译器错误:“非静态成员引用必须相对于特定对象”

董和风
2023-03-14

我一直在尝试学习如何在CPP中的类中声明函数:

这是我写的程序:

    //Passing object as function arguments and returning objects
#include <iostream>
using namespace std;
class item{ //Function can be declared either within the class (in that case, there is no need of making the data private)
    int price;
    float cost;
    public:
    int newFunction(item a){
        a.cost=10;
        a.price=40;
        return a.cost;
    }
} obj1;
int main(){
    cout << item::newFunction(obj1);
    return 0;
}

有人能说出为什么编译器给出错误“一个非静态成员引用必须是相对于一个特定对象的”。

还有,有人能说出::(作用域解析运算符)和使用.(点运算符)访问类元素之间的区别吗。我有点搞不清这两者之间的区别,谷歌搜索这个区别并没有带来任何匹配的结果。

共有2个答案

晁聪
2023-03-14

这是你的答案:-

错误消息:

14:35: error: cannot call member function 'int item::newFunction(item)' without object

你不能只调用一个类函数而不创建它的任何对象,因为如果类函数不是先在RAM中创建的,你就不能直接访问它,这就是为什么我们要创建一个类的对象。

我在main函数中创建了一个临时对象obj2,它可以正常工作。

这是增加的一行

#include <iostream>
using namespace std;

class Item { //Function can be declared either within the class (in that case, there is no need of making the data private)
    int price;
    float cost;

public:

    int newFunction(item a) {
        a.cost=10;
        a.price=40;
        return a.cost;
    }

} obj1;
int main() {
    Item obj2;
    cout << obj2.newFunction(obj1);
    return 0;
}

输出:

10

另外,在命名类时不使用camelcase也不是一个好的做法,所以请记住这一点:)

这是你的答案“::”“之间的区别是什么。”和“->”

虞俊美
2023-03-14

COUT< 这仅当您将 NewFunction()声明为 Static时才起作用。否则,如果要调用成员函数,就必须创建一个对象。 项obj;然后调用 obj.newFunction(obj1);

 类似资料:
  • 请帮帮我 致命错误:在第104行的/home/u357965800/public_html/include/class.admin.php中对非对象调用成员函数prepare()

  • 我为我的RecyclerView设置了一个ItemClickLister,如下所示: 使用我翻译成Kotlin的ItemClickSupport库。 我在(第2行)上收到一个错误,它说: 对象必须声明为抽象或实现抽象成员。 我真的是静态编程语言的新手,我在SO上也找不到任何解决方案。 非常感谢您的帮助。 编辑: 这是我的项目ClickSupport。kt: 这是一个包含整个错误的屏幕截图,以及错误

  • 这是我代码的一部分 我得到一个错误致命错误:对$stmt行上的非对象调用成员函数bind_param()-

  • 我得到一个错误与此文本:(对不起,我的英语不好,我来自德国!) 错误:

  • 我正在准备一个全新的ASP. NET MVC 5.1解决方案。我正在添加一堆Nuget包,并将其与Zurb Foundation等一起设置。 作为其中的一部分,我添加了对内部NuGet包的引用,该包是一个可移植类库,我认为这在构建服务器上造成了问题。 TeamCity因以下原因导致构建失败: 类型'System.对象'在未引用的程序集中定义。您必须添加对程序集System的引用。运行时,版本=4.

  • 我正在使用这个CloudForm模板创建一个Cognito用户池: 是当前和工作用户池的输出: 我在创建堆栈(当然使用不同的名称)时出现此错误,即使堆栈有效: 检测到1个验证错误:架构处的值“phone_number_verified”。18.成员.name”未能满足约束:成员的长度必须小于或等于20(服务:AWSCognitoIdentityProviderService;状态代码:400;错误