欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > c++ extern 的用法

c++ extern 的用法

2024/11/14 20:11:33 来源:https://blog.csdn.net/weixin_44322824/article/details/143724481  浏览:    关键词:c++ extern 的用法

一般用于:1、跨文件引用 2、全局变量

1、跨文件引用变量或者函数

// file1.cpp
int global_var = 100;
int add_numbers(int a, int b)
{return a + b;
}
// file2.cpp
extern int global_var;
extern int add_numbers(int a, int b);
int main()
{// 在这里可以使用在file1.cpp中定义的global_varstd::cout << global_var << std::endl;int result = add_numbers(3, 5);return 0;
}

注意,这种情况需要

add_executable(test src/file1.cpp src/file2.cpp)

才能保证变量可以跨文件引用,要不然编译器根本找不到变量global_var或者函数

2、全局变量

// header.h
extern int shared_variable;//声明
// source1.cpp
int shared_variable = 20;//定义——注意,所有与全局变量相关的文件中,只能定义一次全局变量。
// source2.cpp
#include "header.h"
int main()
{std::cout << shared_variable << std::endl;return 0;
}

常见错误1:test a[24] ‘test’ does not name a type

//test.hpp
#include<stdlib.h>
#include<iostream>
#include <cstdio>
#include<vector>
#include<iostream>
#include<stdlib.h>
#include<fstream>
#include<sstream>
using namespace std;namespace T
{test a[24];class test{public:test();void pf();void se(size_t t);int ddd = 0;};
}
//test.cpp
#include"test.hpp"
namespace T
{void test::pf(){std::cout<<"pf"<<std::endl;}void test::se(size_t t){std::cout<<"se"<<std::endl;}
}
int main(int argc, char** argv)
{T::test tt;tt.pf();return 0;    
}

原因分析1:

由于命名test a[24]的时候,类的函数实现、定义、声明等都还没有出现,所以编译器在编译test a[24]的时候还不能确定test是一个合法的类。

//test.hpp
#include<stdlib.h>
#include<iostream>
#include <cstdio>
#include<vector>
#include<iostream>
#include<stdlib.h>
#include<fstream>
#include<sstream>
using namespace std;namespace T
{class test{public:test();void pf();void se(size_t t);int ddd = 0;};extern test a[24];//声明变量,这个变量的定义是在外部的。
}
//test.cpp
#include"test.hpp"
namespace T
{void test::pf(){std::cout<<"pf"<<std::endl;}void test::se(size_t t){std::cout<<"se"<<std::endl;}//这里,test类型已经完全定义了test a[24];//定义变量。这样编译器就能够确定类名的合法性。
}
int main(int argc, char** argv)
{T::test tt;tt.pf();return 0;    
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com