#include <string>
#include <iostream>
#include <fstream>
#include <boost/program_options.hpp>
#include "inc/workspace.h"
#include "inc/network.h"
using namespace std;
using namespace DSSRExpression;
const string g_copyright = "Copyright (c) 2014 Yao(21741121@qq.com), Heqibo. All rights reserved.";
const string g_version = "Build expression of the Distribution System Security Region Version 1.0.0609"; // Major.Minor.Date
int main(int ac, char* av[])
{
try
{
string input_directory;
string output_directory;
namespace po = boost::program_options;
// 基本参数
po::options_description generic_options("Usage,\nGeneric options");
generic_options.add_options()
("help,h", "print help message")
("input,i", po::value<string>(&input_directory)->default_value("IN"), "directory of input files")
("output,o", po::value<string>(&output_directory)->default_value("OUT"), "directory for output files")
("debug,d", "output debug file to output directory")
;
// 读取文件参数
string work_space_file;
po::options_description config_options("Config options");
config_options.add_options()
("config-file", po::value<string>(&work_space_file), "config file with generic options")
;
po::positional_options_description p;
p.add("config-file", -1);
// 解析命令行参数
po::options_description cmd_options = generic_options.add(config_options);
po::variables_map vm;
po::store(po::command_line_parser(ac, av).options(cmd_options).positional(p).style(po::command_line_style::default_style | po::command_line_style::case_insensitive | po::command_line_style::allow_slash_for_short).run(), vm);
//po::store(po::parse_command_line(ac, av, desc, po::command_line_style::default_style | po::command_line_style::case_insensitive | po::command_line_style::allow_slash_for_short), vm);
po::notify(vm);
if (!work_space_file.empty())
{
// 存在workspace文件时,以此为准
// 解析workspace参数
ifstream ifs(work_space_file);
vm.clear();
po::store(po::parse_config_file(ifs, generic_options), vm);
po::notify(vm);
}
cout << g_version << "\n" << g_copyright << "\n\n";
if (vm.count("help") > 0|| vm.empty())
{
cout << cmd_options << "\n";
return EXIT_SUCCESS;
}
if (!input_directory.empty() && !output_directory.empty())
{
// 建立工作空间,读取参数
work_space ws;
ws.set_directory(input_directory, output_directory);
ws.is_output_debugfile = vm.count("debug") > 0;
// 读取输入文件,生成网络
network* p_nw = new network();
ws.build_network(p_nw);
// 生成表达式
p_nw->compile_expression();
// 根据表达式计算结果
p_nw->calculate_expression_value();
// 输出结果
ws.output(p_nw);
delete p_nw;
p_nw = nullptr;
return EXIT_SUCCESS;
}
}
catch(exception& e)
{
cerr << "Oops! " << e.what() << "\n";
return EXIT_FAILURE;
}
catch(...)
{
cerr << "Exception of unknown type!\n";
return EXIT_FAILURE;
}
return EXIT_FAILURE;
}
警告 1 warning MSB8028: The intermediate directory (.\Debug\) contains files shared from another project (expression.vcxproj). This can lead to incorrect clean and rebuild behavior. C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppBuild.targets 381 5 main
错误 2 error LNK2019: 无法解析的外部符号 "public: __thiscall DSSRExpression::network::network(void)" (??0network@DSSRExpression@@QAE@XZ),该符号在函数 _main 中被引用 G:\DSSRExpression_20140619不含NULL版都转带不过采取分开转带方式\DSSRExpression_20140619不含NULL版都转带不过采取分开转带方式\src\main.obj main
错误 3 error LNK2019: 无法解析的外部符号 "public: __thiscall DSSRExpression::network::~network(void)" (??1network@DSSRExpression@@QAE@XZ),该符号在函数 "public: void * __thiscall DSSRExpression::network::`scalar deleting destructor'(unsigned int)" (??_Gnetwork@DSSRExpression@@QAEPAXI@Z) 中被引用 G:\DSSRExpression_20140619不含NULL版都转带不过采取分开转带方式\DSSRExpression_20140619不含NULL版都转带不过采取分开转带方式\src\main.obj main
错误 4 error LNK2019: 无法解析的外部符号 "public: void __thiscall DSSRExpression::network::compile_expression(void)" (?compile_expression@network@DSSRExpression@@QAEXXZ),该符号在函数 _main 中被引用 G:\DSSRExpression_20140619不含NULL版都转带不过采取分开转带方式\DSSRExpression_20140619不含NULL版都转带不过采取分开转带方式\src\main.obj main
错误 5 error LNK2019: 无法解析的外部符号 "public: void __thiscall DSSRExpression::network::calculate_expression_value(void)" (?calculate_expression_value@network@DSSRExpression@@QAEXXZ),该符号在函数 _main 中被引用 G:\DSSRExpression_20140619不含NULL版都转带不过采取分开转带方式\DSSRExpression_20140619不含NULL版都转带不过采取分开转带方式\src\main.obj main
错误 6 error LNK2019: 无法解析的外部符号 "public: __thiscall DSSRExpression::work_space::work_space(void)" (??0work_space@DSSRExpression@@QAE@XZ),该符号在函数 _main 中被引用 G:\DSSRExpression_20140619不含NULL版都转带不过采取分开转带方式\DSSRExpression_20140619不含NULL版都转带不过采取分开转带方式\src\main.obj main
错误 7 error LNK2019: 无法解析的外部符号 "public: __thiscall DSSRExpression::work_space::~work_space(void)" (??1work_space@DSSRExpression@@QAE@XZ),该符号在函数 _main 中被引用 G:\DSSRExpression_20140619不含NULL版都转带不过采取分开转带方式\DSSRExpression_20140619不含NULL版都转带不过采取分开转带方式\src\main.obj main
错误 8 error LNK2019: 无法解析的外部符号 "public: void __thiscall DSSRExpression::work_space::set_directory(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?set_directory@work_space@DSSRExpression@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@0@Z),该符号在函数 _main 中被引用 G:\DSSRExpression_20140619不含NULL版都转带不过采取分开转带方式\DSSRExpression_20140619不含NULL版都转带不过采取分开转带方式\src\main.obj main
错误 9 error LNK2019: 无法解析的外部符号 "public: void __thiscall DSSRExpression::work_space::build_network(class DSSRExpression::network *)" (?build_network@work_space@DSSRExpression@@QAEXPAVnetwork@2@@Z),该符号在函数 _main 中被引用 G:\DSSRExpression_20140619不含NULL版都转带不过采取分开转带方式\DSSRExpression_20140619不含NULL版都转带不过采取分开转带方式\src\main.obj main
错误 10 error LNK2019: 无法解析的外部符号 "public: void __thiscall DSSRExpression::work_space::output(class DSSRExpression::network *)" (?output@work_space@DSSRExpression@@QAEXPAVnetwork@2@@Z),该符号在函数 _main 中被引用 G:\DSSRExpression_20140619不含NULL版都转带不过采取分开转带方式\DSSRExpression_20140619不含NULL版都转带不过采取分开转带方式\src\main.obj main
错误 11 error LNK1120: 9 个无法解析的外部命令 G:\DSSRExpression_20140619不含NULL版都转带不过采取分开转带方式\DSSRExpression_20140619不含NULL版都转带不过采取分开转带方式\src\Debug\main.exe 1 1 main
本人新手求解答