c++;编译器错误-变量的多个定义 我正在努力学习C++语言(所以请容忍我的笨拙)。 根据几本书中的教程,我决定尝试使用标题

c++;编译器错误-变量的多个定义 我正在努力学习C++语言(所以请容忍我的笨拙)。 根据几本书中的教程,我决定尝试使用标题,c++,C++,我有一个名为Untitled2.cpp的文件,其中包含 #include <iostream> #include "findaverage.h" #include <string> using namespace std; int main(){ cout<<find_average(); } 和包含 #ifndef FINDAVERAGE_H #define FINDAVERAGE_H int find_average(); double first_n

我有一个名为Untitled2.cpp的文件,其中包含

#include <iostream>
#include "findaverage.h"
#include <string>
using namespace std;

int main(){
cout<<find_average();
}
和包含

#ifndef FINDAVERAGE_H
#define FINDAVERAGE_H
int find_average();
double first_no;
double second_no;
#endif
#include "findaverage.h"
#include <iostream>
using namespace std;
int find_average(){
std::cout << "Enter a number"<<endl;
std::cin>>first_no;
std::cout<<"Enter another number"<<endl;
std::cin>>second_no;
return (first_no+second_no)/2;
};
我正试图遵循类似于这张图片的方法


问题:如何在我的实验代码中成功地解决多定义问题?

问题是您包含了一个带有全局变量定义的标题。标题应仅包括声明,而不包括定义:

#ifndef FINDAVERAGE_H
#define FINDAVERAGE_H
int find_average();
extern double first_no;
extern double second_no;
#endif
但是,由于您需要在一个cpp文件中提供变量的定义(例如,在
Untitled2.cpp
中),因此无法生成其他错误:

#include <iostream>
#include "findaverage.h"
#include <string>
using namespace std;

int main(){
    cout<<find_average();
}

double first_no;
double second_no;
#包括
#包括“findaverage.h”
#包括
使用名称空间std;
int main(){

无法将头文件更改为

#ifndef FINDAVERAGE_H
#define FINDAVERAGE_H
int find_average();
// No - wrong place double first_no;
// No - wrong place double second_no;
#endif
因为变量将包含在.cpp文件中的任何头文件中

把函数改成这个

int find_average(){
  double first_no;
  double second_no;

   std::cout << "Enter a number"<<endl;
   std::cin>>first_no;
   std::cout<<"Enter another number"<<endl;
   std::cin>>second_no;
   return (first_no+second_no)/2;
};
int find_average(){
双首字母;
双二号;

std::cout 1.使用2.不是一个好主意。请不要发布图像,除非您必须在头文件中显示为什么是
double first\u no;double second\u no;
。我猜您试图使用全局变量-这也是一个坏主意idea@Ed治疗..我认为我们可以把它放在一个标题中?我正在看图片中的快照并进行实验…我但不能说我哪里出错了。不要使用全局变量。将它们放入.cpp文件和函数中这似乎可以解决问题,但我收到另一个错误“未定义对first_no的引用”在findaverage。cpp@repzero你是否如上图所示为你的
Untitled2.cpp添加了定义?太棒了!!!!…我想我现在明白了…我需要阅读更多关于extern的内容…我注意到了,但在精神上从未领会过它…@repzero与extern的交易非常简单。我想你已经看到了函数与proto的区别类型-即,标题中的声明没有正文,这使其成为声明,而cpp中的标题又加上正文,这使其成为定义。变量没有“正文”,因此
extern
表示“这是一个没有正文的变量”,即承诺在其他地方使用相同名称的变量。在cpp文件中声明的相同变量提供了“body”,以便链接器可以找到它…感谢您为我详细介绍了这一点..:DGr8…似乎简化了,而且非常方便
int find_average(){
  double first_no;
  double second_no;

   std::cout << "Enter a number"<<endl;
   std::cin>>first_no;
   std::cout<<"Enter another number"<<endl;
   std::cin>>second_no;
   return (first_no+second_no)/2;
};