C++ 关于C+;中的头文件创建错误+;
我正在为.cpp文件创建头文件,其中只包含函数的声明或原型 下面是我写的三个程序 1.header.h文件//其中我声明了函数add(,)和sub(,) 2.header.cpp,其中我定义了函数add(,)和sub(,)C++ 关于C+;中的头文件创建错误+;,c++,windows,visual-studio-2010,C++,Windows,Visual Studio 2010,我正在为.cpp文件创建头文件,其中只包含函数的声明或原型 下面是我写的三个程序 1.header.h文件//其中我声明了函数add(,)和sub(,) 2.header.cpp,其中我定义了函数add(,)和sub(,) #包括 #包括“header.h” 使用名称空间std; 整数相加(整数a,整数b){ s=10; INTC=a+b+s; 返回c; } 内部子(内部a、内部b){ int c=a-b; 返回c; } 3.example.cpp #include<i
#包括
#包括“header.h”
使用名称空间std;
整数相加(整数a,整数b){
s=10;
INTC=a+b+s;
返回c;
}
内部子(内部a、内部b){
int c=a-b;
返回c;
}
3.example.cpp
#include<iostream>
#include"header.h"
using namespace std;
void main(){
int a=10,b=20;
int c=add(a,b);
int d=sub(c,a);
cout<<"c"<<c;
cout<<"d"<<d;
//cout<<s;
getchar();
}
#包括
#包括“header.h”
使用名称空间std;
void main(){
INTA=10,b=20;
int c=添加(a,b);
int d=sub(c,a);
因为.h中的这一行已经是一个定义,所以不能得到错误:
int s;
您需要在标题中包含以下内容:
extern int s;
然后在一个.cpp文件中,通常是一个与.h文件具有相同基本文件名的文件,您需要具有以下定义:
int s;
相关:你不需要函数声明中的extern
关键字,因为它们只是声明,告诉编译器这样一个函数存在于某个地方,你可以任意多次这样做。但是如果你把一个全局(非静态
,非内联
)函数定义(带有{}
函数体而不是;
)对于一个.h文件,您确实会在多个定义上遇到类似的链接器错误。如果您使用include-guard#define,我认为在它们内部放置一次#pragma是没有意义的。
但我在互联网上读到使用#pragma将保持代码执行的优化,我补充说,你的意思是说我只能写,#ifndef#pragma..endif,r是吗?不,#ifndef
和#define
就像你拥有它们一样一起运行。#pragma once
是一个非标准化的替代方案,可能会减少某些编译器的编译时间。它不会以任何方式影响代码执行。你可能应该把它放在外部,或者根本不使用它。@Santhosh CoolO、 一旦你得到满意的答案,你就把你最喜欢的答案标记为已接受(答案左上角的勾号)。这将把问题标记为“已解决”。
extern int s;
int s;