【问题标题】:error in friend function declaration c++友元函数声明c ++中的错误
【发布时间】:2017-06-25 05:14:12
【问题描述】:

我收到一个编译错误。

||=== 构建:在 24.06.01 中调试(编译器:GNU GCC 编译器)===|

G:\C++\24.06.01\main.cpp|22|error: 'void sum(Sb1, Sb2)' 重新声明为不同类型的符号|

G:\C++\24.06.01\main.cpp|5|注意:之前的声明'int sum [40]'|

G:\C++\24.06.01\main.cpp|36|error: 'void sum(Sb1, Sb2)' redeclared as different kind of symbol|

G:\C++\24.06.01\main.cpp|5|注意:之前的声明'int sum [40]'|

G:\C++\24.06.01\main.cpp||在函数'void sum(Sb1, Sb2)'中:|

G:\C++\24.06.01\main.cpp|38|error: 'void sum(Sb1, Sb2)' redeclared as different kind of symbol|

G:\C++\24.06.01\main.cpp|5|注意:之前的声明'int sum [40]'|

G:\C++\24.06.01\main.cpp||在函数'int main()'中:|

G:\C++\24.06.01\main.cpp|69|错误:'sum' 不能用作函数|

||=== 构建失败:4 个错误,0 个警告(0 分钟,1 秒)===|

请帮忙!!

#include<iostream>
#include<conio.h>
#include<stdlib.h>
using namespace std;
int sum[40];
int roll[40];
int n;
class Sb1;
class Sb2;
class Sb1
{
    public:
    float marks1[40];
    void markssb1()
    {
       for(int i=0;i<n;i++)
       {
         cout<<"Enter Marks in subject 1 \n";
         cin>>marks1[40];
       }
    }
    friend void sum(Sb1,Sb2);
};
class Sb2
{
    public:
    float marks2[40];
    void markssb2()
    {
       for(int i=0;i<n;i++)
       {
         cout<<"Enter Marks in subject 2 \n";
         cin>>marks2[40];
       }
    }
    friend void sum(Sb1,Sb2);
};
void sum(Sb1 obj1,Sb2 obj2)
{
    for(int i=0;i<n;i++)
    {
        sum[i]=obj1.marks1[i]+obj2.marks2[i];
    }
}
void display()
{
    cout<<"Serial Number\t\t\tRoll Number\t\t\tTotal Marks\n";
    cout<<"----------------------------------------------------------------------------\n";
    for(int i=0;i<n;i++)
    {
        cout<<i<<"\t\t\t\t"<<roll[i]<<"\t\t\t\t"<<sum[i]<<endl;
    }
}
int main()
{
    Sb1 obj1;
    Sb2 obj2;
   cout<<"Enter number of students (Maximum 40 students)\n";
   cin>>n;
   if(n<=40)
    {
        for(int i=0;i<n;i++)
        {
            cout<<"Enter Roll Number of student "<<i+1<<endl;
            cin>>roll[i];
            obj1.markssb1();
            obj2.markssb2();
        }
        sum(obj1,obj2);
        display();
    }
    else
    {
      cout<<"Number of students entered exceed 40\n";
    }
    return 0;
    getch();
}

【问题讨论】:

  • &lt;conio.h&gt;?这似乎不是 C++11。你在使用 Turbo C++ 吗?
  • 错误消息一目了然。与其对消息的数量感到恐慌,不如将它们作为一个整体阅读并了解正在发生的事情。您有一个名为 sum 的数组,而 friend 声明用于名为 sum 的函数,该函数将在同一范围内。尽管您可以重载函数,但不允许使用与变量同名的函数。重命名其中一个。
  • @Peter 我不明白它说声明不同类型符号的错误。无论如何谢谢!
  • @GarvitKothari - 没有借口。您需要努力学习的一项关键技能是解释来自编译器的一组错误消息。软件开发和编程是关于解决问题的。程序员需要克服的关键问题之一是理解来自编译器的错误消息,因为编译器只足够聪明地检测单个问题并报告它们,而不是推理出如何修复它们。人类具有推理能力,并且有能力提高这些能力。编译器没有,因此无法对他们在代码中遇到的一系列问题给出简单的解释。
  • @Peter That,或者在 SO 上转储代码并让其他人为你推理:-)

标签: c++ friend-function


【解决方案1】:

您已经将“sum”声明为全局变量:

int sum[40];

C++ 不允许重新定义名称。您可以更改变量或函数名称来解决此问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多