(一)直流梯形网络计算的源程序实践与理解
#include "stdafx.h"
#include <iostream>
using namespace std;
void main()
{
int n, j, k;
double e, ee, q;
cout << "please input data,n=? e=?" << endl;//提醒输入两个数到n和e
cin >> n >> e;//送到n的是整型数,送到e的是实型数
cout << "n=" << n << "e=" << e << endl;//回应打印刚输入的数据n和e
vector r(n + 1), i(n + 1), u(n + 1);//对三个数组分别动态地开辟含n+1元素的空间
cout << "input r[i],i=1,...,n" << endl;
for(j = 1; j <= n; j++)cin >> r[j];//输入各电阻,为方便阅读,电路图中的电阻符号与数组r中存放的下标一致,r[0]不用
for (j = 1; j <= n; j++)
cout << "r[" << j << "]=" << r[j] << endl;/*print resitance*/
//以下当u[n]=1,计算各支路的电流和电压
u[n] = 1.0;
i[n] = u[n] / r[n];
i[n - 1] = i[n]; u[n - 1] = r[n - 1] * i[n - 1];
for (k = n - 2;k >= 2; k = k - 2)
{
u[k] = u[k + 1] + u[k + 2]; i[k] = u[k] / r[k];
i[k - 1] = i[k] + i[k + 1]; u[k - 1] = r[k - 1] * i[k - 1];
}
ee = u[1] + u[2];
//以下是当电势e为给定值时,计算各支路的电流和电压
q = e / ee;
cout << "branch no.current voltage" << endl;
for(j=1;j<=n;j++)
{
u[j] = q*u[j]; i[j] = q*i[j];
cout << " " << j;//输入各支路号
cout.width(14);
cout.precision(5);
cout << i[j];
cout.width(14); cout.precision(4); cout << u[j] << endl;
}
}
源程序采用添加下列头文件,以此调用vector.cpp中的class vector,但无法成功
#include "vector.cpp"
(二)A工程文件调用B工程文件的方法(仅为经验)
a)前提,B工程文件已经分为头文件、类的源文件和主程序源文件三大块。如果只是在A的主程序文件中添加B.h头,则会报错
1>DCladdernetworkcpp.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall vector::vector(int)" (??0vector@@QAE@H@Z),该符号在函数 _main 中被引用
1>DCladdernetworkcpp.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall vector::~vector(void)" (??1vector@@QAE@XZ),该符号在函数 _main 中被引用
1>DCladdernetworkcpp.obj : error LNK2019: 无法解析的外部符号 "public: float & __thiscall vector::operator[](int)" (??Avector@@QAEAAMH@Z),该符号在函数 _main 中被引用
1>C:\Users\Jacon\source\repos\DC ladder network.cpp\Debug\DC ladder network.cpp.exe : fatal error LNK1120: 3 个无法解析的外部命令
1>已完成生成项目“DC ladder network.cpp.vcxproj”的操作 - 失败。
解决方法是A主程序添加B.h之后,还要在源文件下面添加B工程的类的源文件,之后再次debug,则运行不报错,应当注意不要添加B工程的主程序源文件,因为一个源文件下面只要有一个main主程序源文件
b)另一方法为新建工程文件,导入所有的cpp文件,只保留想要执行的主函数,也会出现预期结果,此方法用在需要运行多个.cpp文件时