VS2017 C++ 在主源文件中调用其他源文件的三种方法以及命名空间的使用方法

一、 #include “A.h” ,不通过静态库

(1)打开VS2017,新建一个名为project空项目;
在这里插入图片描述
(2)新建一个A.h头文件,声明类、函数和变量,代码如下:

#pragma once
#ifndef A_H
#define A_H

namespace A {
class Stack
{
private:
	int *data;					//存放栈数据
	int count;					//存放栈顶指针
	int size;					//栈的容量
public:
	Stack(int stacksize = 10);	//构造函数建立具有10元素的默认栈
	~Stack();
	void Push(int x);			//元素入栈
	int Pop();					//元素出栈
	int howMany();				//判定栈中有多个元素
};

int summ(int a, int b);

void f();

extern int n;

}
#endif // !A_H

(3)新建一个B.h头文件,声明类、函数和变量,代码如下:

#pragma once
#ifndef B_H
#define B_H

namespace B {
	class Stack
	{
	private:
		int *data;					//存放栈数据
		int count;					//存放栈顶指针
		int size;					//栈的容量
	public:
		Stack(int stacksize = 10);	//构造函数建立具有10元素的默认栈
		~Stack();
		void Push(int x);			//元素入栈
		int Pop();					//元素出栈
		int howMany();				//判定栈中有多个元素
	};

	int summ(int a, int b);

	void g();

	extern int n;

}
#endif // !B_H

(4)新建一个A.cpp源文件,代码如下:

#include "A.h"			//包含头文件
#include <iostream>			//push和pop都用到了cout,所以包含此头文件
using namespace std;
A::Stack::Stack(int stacksize)
{
	if (stacksize > 0)
	{
		size = stacksize;
		data = new int[stacksize];
		for (int i = 0; i < size; i++)
			data[i] = 0;
	}
	else
	{
		data = 0;
		size = 0;
	}
	count = 0;
}

A::Stack::Stack::~Stack()
{
	delete[]data;
}
void A::Stack::Stack::Push(int x)
{
	if (count < size)
	{
		data[count] = x;
		count++;
	}
	else
	{
		cout << "堆栈已满,不能再压入数据: " << x << endl;
	}
}
int A::Stack::Stack::Pop()
{
	if (count <= 0)
	{
		cout << "堆栈已空!" << endl;
		exit(1);						//堆栈操作失败,退出程序!
	}
	count--;
	return data[count];
}
int A::Stack::Stack::howMany()
{
	return count;
}


int A::summ(int a, int b) {
	return a + b;
}

void A::f() {
	cout << "A::f()" << endl;
}

int A::n = 10;

(5)新建一个B.cpp源文件,代码如下:

#include "B.h"			//包含头文件
#include <iostream>			//push和pop都用到了cout,所以包含此头文件
using namespace std;
B::Stack::Stack(int stacksize)
{
	if (stacksize > 0)
	{
		size = stacksize;
		data = new int[stacksize];
		for (int i = 0; i < size; i++)
			data[i] = 0;
	}
	else
	{
		data = 0;
		size = 0;
	}
	count = 0;
}

B::Stack::Stack::~Stack()
{
	delete[]data;
}
void B::Stack::Stack::Push(int x)
{
	if (count < size)
	{
		data[count] = x;
		count++;
	}
	else
	{
		cout << "堆栈已满,不能再压入数据: " << x << endl;
	}
}
int B::Stack::Stack::Pop()
{
	if (count <= 0)
	{
		cout << "堆栈已空!" << endl;
		exit(1);						//堆栈操作失败,退出程序!
	}
	count--;
	return data[count];
}
int B::Stack::Stack::howMany()
{
	return count;
}


int B::summ(int a, int b) {
	return a + b+100;
}

void B::g() {
	cout << "B::g()" << endl;
}

int B::n = 20;

(6)新建一个main.cpp源文件,代码如下:

//应用栈类的主程序:main.cpp
#include <iostream>
#include "A.h"
#include "B.h"
using namespace std;
using namespace A;
using namespace B;
void main()
{
	A::Stack s1;
	s1.Push(1);
	s1.Push(12);
	s1.Push(32);
	int x1 = s1.Pop();
	int x2 = s1.Pop();
	int x3 = s1.Pop();
	cout << x1 << "\t" << x2 << "\t" << x3 << endl;
	cout << "summ:" << A::summ(3, 4) << endl;
	cout << "A::n :  " << A::n << endl;
	f();

	cout << "***************************" << endl;

	B::Stack s2;
	s2.Push(11);
	s2.Push(121);
	s2.Push(321);
	int y1 = s2.Pop();
	int y2 = s2.Pop();
	int y3 = s2.Pop();
	cout << y1 << "\t" << y2 << "\t" << y3 << endl;
	cout << "summ:" << B::summ(3, 4) << endl;
	cout << "B::n :  " << B::n << endl;
	g();

	system("PAUSE");
}

文件组织如下:
在这里插入图片描述
(5)F5调试,结果如下,成功。
在这里插入图片描述

二、#include “A.h” ,通过静态库

(1)制作静态库
参考博客:VS2017 静态链接库(.lib)的制作和调用,并对环境配置进行试验
打开VS2017,新建一个项目,选择Windows桌面→静态库,输入项目名StaticLib,选择位置,点击确定。
在这里插入图片描述
(2)将环境设置为 Debug x64
在这里插入图片描述
(3)添加头文件A.h,代码如下(stdafx.h和targetver.h是自动生成的):

#pragma once
#ifndef A_H
#define A_H
#include"stdafx.h"  //特别要注意:需要添加#include"stdafx.h" ;

namespace A {
	class Stack
	{
	private:
		int *data;					//存放栈数据
		int count;					//存放栈顶指针
		int size;					//栈的容量
	public:
		Stack(int stacksize = 10);	//构造函数建立具有10元素的默认栈
		~Stack();
		void Push(int x);			//元素入栈
		int Pop();					//元素出栈
		int howMany();				//判定栈中有多个元素
	};

	int summ(int a, int b);

	void f();

	extern int n;

}
#endif // !A_H

(4)添加头文件B.h,代码如下:

#pragma once
#ifndef B_H
#define B_H
#include"stdafx.h"  //特别要注意:需要添加#include"stdafx.h"  ;

namespace B {
	class Stack
	{
	private:
		int *data;					//存放栈数据
		int count;					//存放栈顶指针
		int size;					//栈的容量
	public:
		Stack(int stacksize = 10);	//构造函数建立具有10元素的默认栈
		~Stack();
		void Push(int x);			//元素入栈
		int Pop();					//元素出栈
		int howMany();				//判定栈中有多个元素
	};

	int summ(int a, int b);

	void g();

	extern int n;

}
#endif // !B_H

(5)添加源文件:A.cpp,(stdafx.cpp是自动生成的),代码如下:

#include"stdafx.h"          //特别要注意:把#include"stdafx.h"  放在最前面;
#include "A.h"			//包含头文件
#include <iostream>			//push和pop都用到了cout,所以包含此头文件
using namespace std;
A::Stack::Stack(int stacksize)
{
	if (stacksize > 0)
	{
		size = stacksize;
		data = new int[stacksize];
		for (int i = 0; i < size; i++)
			data[i] = 0;
	}
	else
	{
		data = 0;
		size = 0;
	}
	count = 0;
}

A::Stack::Stack::~Stack()
{
	delete[]data;
}
void A::Stack::Stack::Push(int x)
{
	if (count < size)
	{
		data[count] = x;
		count++;
	}
	else
	{
		cout << "堆栈已满,不能再压入数据: " << x << endl;
	}
}
int A::Stack::Stack::Pop()
{
	if (count <= 0)
	{
		cout << "堆栈已空!" << endl;
		exit(1);						//堆栈操作失败,退出程序!
	}
	count--;
	return data[count];
}
int A::Stack::Stack::howMany()
{
	return count;
}


int A::summ(int a, int b) {
	return a + b;
}

void A::f() {
	cout << "A::f()" << endl;
}

int A::n = 10;

(6)添加源文件:B.cpp,,代码如下:

#include"stdafx.h"          //特别要注意:把#include"stdafx.h"  放在最前面;
#include "B.h"			//包含头文件
#include <iostream>			//push和pop都用到了cout,所以包含此头文件
using namespace std;
B::Stack::Stack(int stacksize)
{
	if (stacksize > 0)
	{
		size = stacksize;
		data = new int[stacksize];
		for (int i = 0; i < size; i++)
			data[i] = 0;
	}
	else
	{
		data = 0;
		size = 0;
	}
	count = 0;
}

B::Stack::Stack::~Stack()
{
	delete[]data;
}
void B::Stack::Stack::Push(int x)
{
	if (count < size)
	{
		data[count] = x;
		count++;
	}
	else
	{
		cout << "堆栈已满,不能再压入数据: " << x << endl;
	}
}
int B::Stack::Stack::Pop()
{
	if (count <= 0)
	{
		cout << "堆栈已空!" << endl;
		exit(1);						//堆栈操作失败,退出程序!
	}
	count--;
	return data[count];
}
int B::Stack::Stack::howMany()
{
	return count;
}


int B::summ(int a, int b) {
	return a + b + 100;
}

void B::g() {
	cout << "B::g()" << endl;
}

int B::n = 20;

(7)右键项目,点击生成;
在这里插入图片描述
生成:成功1个;
在这里插入图片描述
在D:\1-C++\static\StaticLib\x64\Debug目录下,有StaticLib.lib静态链接库生成。
在这里插入图片描述
(8)新建空项目,test-static
在这里插入图片描述
(9)将环境设置为 Debug x64
在这里插入图片描述
(10)在源文件目录下(D:\1-C++\static\test-static\test-static)新建一个存放头文件的文件夹,假设为h,将stack.h、stdafx.h和targetver.h复制到h中,并将头文件添加到项目的头文件中;
在这里插入图片描述

(11)在源文件目录下(D:\1-C++\static\test-static\test-static)新建一个存放静态库文件.lib的文件夹,假设为lib,生成的StaticLib.lib放在该文件夹中;
在这里插入图片描述
(10)配置属性
在VS底部点击属性管理器,在Debug|x64处右击,选择添加新项目属性表(也可以选择添加现有属性表,如果有的话)
在这里插入图片描述
在这里插入图片描述
选择PropertySheet,右击,选择属性
在这里插入图片描述
在通用属性 — C/C++ — 常规 — 附加包含目录,选择头文件存放目录;
在这里插入图片描述
通用属性 —链接器—常规—附加库目录:选择lib文件存放目录。
在这里插入图片描述
在通用属性 —链接器—输入—附加依赖项:加上lib文件名
在这里插入图片描述
(11)新建源文件:main.cpp,代码如下:

//应用栈类的主程序:main.cpp
#include <iostream>
#include "A.h"
#include "B.h"
using namespace std;
using namespace A;
using namespace B;
void main()
{
	A::Stack s1;
	s1.Push(1);
	s1.Push(12);
	s1.Push(32);
	int x1 = s1.Pop();
	int x2 = s1.Pop();
	int x3 = s1.Pop();
	cout << x1 << "\t" << x2 << "\t" << x3 << endl;
	cout << "summ:" << A::summ(3, 4) << endl;
	cout << "A::n :  " << A::n << endl;
	f();

	cout << "***************************" << endl;

	B::Stack s2;
	s2.Push(11);
	s2.Push(121);
	s2.Push(321);
	int y1 = s2.Pop();
	int y2 = s2.Pop();
	int y3 = s2.Pop();
	cout << y1 << "\t" << y2 << "\t" << y3 << endl;
	cout << "summ:" << B::summ(3, 4) << endl;
	cout << "B::n :  " << B::n << endl;
	g();

	system("PAUSE");
}

在这里插入图片描述
(12)F5 调试运行,成功。
在这里插入图片描述

三、通过在主源文件中重新声明

(1)打开VS2017,新建一个名为project空项目;
在这里插入图片描述
(2)新建一个 A.cpp源文件,声明与定义类、函数和变量,代码如下:

#include <iostream>			//push和pop都用到了cout,所以包含此头文件
using namespace std;

namespace A {
	class Stack
	{
	private:
		int *data;					//存放栈数据
		int count;					//存放栈顶指针
		int size;					//栈的容量
	public:
		Stack(int stacksize = 10);	//构造函数建立具有10元素的默认栈
		~Stack();
		void Push(int x);			//元素入栈
		int Pop();					//元素出栈
		int howMany();				//判定栈中有多个元素
	};

	int summ(int a, int b);

	void f();

	extern int n;

}

A::Stack::Stack(int stacksize)
{
	if (stacksize > 0)
	{
		size = stacksize;
		data = new int[stacksize];
		for (int i = 0; i < size; i++)
			data[i] = 0;
	}
	else
	{
		data = 0;
		size = 0;
	}
	count = 0;
}

A::Stack::Stack::~Stack()
{
	delete[]data;
}
void A::Stack::Stack::Push(int x)
{
	if (count < size)
	{
		data[count] = x;
		count++;
	}
	else
	{
		cout << "堆栈已满,不能再压入数据: " << x << endl;
	}
}
int A::Stack::Stack::Pop()
{
	if (count <= 0)
	{
		cout << "堆栈已空!" << endl;
		exit(1);						//堆栈操作失败,退出程序!
	}
	count--;
	return data[count];
}
int A::Stack::Stack::howMany()
{
	return count;
}


int A::summ(int a, int b) {
	return a + b;
}

void A::f() {
	cout << "A::f()" << endl;
}

int A::n = 10;

(2)新建一个 B.cpp源文件,声明与定义类、函数和变量,代码如下:

#include <iostream>			//push和pop都用到了cout,所以包含此头文件
using namespace std;

namespace B {
	class Stack
	{
	private:
		int *data;					//存放栈数据
		int count;					//存放栈顶指针
		int size;					//栈的容量
	public:
		Stack(int stacksize = 10);	//构造函数建立具有10元素的默认栈
		~Stack();
		void Push(int x);			//元素入栈
		int Pop();					//元素出栈
		int howMany();				//判定栈中有多个元素
	};

	int summ(int a, int b);

	void g();

	extern int n;

}


B::Stack::Stack(int stacksize)
{
	if (stacksize > 0)
	{
		size = stacksize;
		data = new int[stacksize];
		for (int i = 0; i < size; i++)
			data[i] = 0;
	}
	else
	{
		data = 0;
		size = 0;
	}
	count = 0;
}

B::Stack::Stack::~Stack()
{
	delete[]data;
}
void B::Stack::Stack::Push(int x)
{
	if (count < size)
	{
		data[count] = x;
		count++;
	}
	else
	{
		cout << "堆栈已满,不能再压入数据: " << x << endl;
	}
}
int B::Stack::Stack::Pop()
{
	if (count <= 0)
	{
		cout << "堆栈已空!" << endl;
		exit(1);						//堆栈操作失败,退出程序!
	}
	count--;
	return data[count];
}
int B::Stack::Stack::howMany()
{
	return count;
}


int B::summ(int a, int b) {
	return a + b+100;
}

void B::g() {
	cout << "B::g()" << endl;
}

int B::n = 20;

(4)新建一个main.cpp源文件,代码如下:

//应用栈类的主程序:main.cpp
#include <iostream>
using namespace std;
namespace A {
	class Stack
	{
	private:
		int *data;					//存放栈数据
		int count;					//存放栈顶指针
		int size;					//栈的容量
	public:
		Stack(int stacksize = 10);	//构造函数建立具有10元素的默认栈
		~Stack();
		void Push(int x);			//元素入栈
		int Pop();					//元素出栈
		int howMany();				//判定栈中有多个元素
	};

	int summ(int a, int b);

	void f();

	extern int n;

}

namespace B {
	class Stack
	{
	private:
		int *data;					//存放栈数据
		int count;					//存放栈顶指针
		int size;					//栈的容量
	public:
		Stack(int stacksize = 10);	//构造函数建立具有10元素的默认栈
		~Stack();
		void Push(int x);			//元素入栈
		int Pop();					//元素出栈
		int howMany();				//判定栈中有多个元素
	};

	int summ(int a, int b);

	void g();

	extern int n;

}

using namespace A;
using namespace B;


void main()
{
	A::Stack s1;
	s1.Push(1);
	s1.Push(12);
	s1.Push(32);
	int x1 = s1.Pop();
	int x2 = s1.Pop();
	int x3 = s1.Pop();
	cout << x1 << "\t" << x2 << "\t" << x3 << endl;
	cout << "summ:" << A::summ(3, 4) << endl;
	cout << "A::n :  " << A::n << endl;
	f();

	cout << "***************************" << endl;

	B::Stack s2;
	s2.Push(11);
	s2.Push(121);
	s2.Push(321);
	int y1 = s2.Pop();
	int y2 = s2.Pop();
	int y3 = s2.Pop();
	cout << y1 << "\t" << y2 << "\t" << y3 << endl;
	cout << "summ:" << B::summ(3, 4) << endl;
	cout << "B::n :  " << B::n << endl;
	g();

	system("PAUSE");
}

文件组织如下:
在这里插入图片描述
(7)F5调试,结果如下,成功。
在这里插入图片描述

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值