使用VS2013编译Boost
我在这里尝试编译Boost Calc6示例: 通常情况下,使用Xcode在我的Mac上运行时不会出现故障。目前,我在使用VS2013的PC上。在创建Win32 Console应用程序时,我向标准设置中添加了一些内容。通常,它会为您设置ProjectTitle.cpp和stdafx.cpp,其中包含stdafx.h 下面是Calc示例中包含main的文件的样子使用VS2013编译Boost,boost,visual-studio-2013,Boost,Visual Studio 2013,我在这里尝试编译Boost Calc6示例: 通常情况下,使用Xcode在我的Mac上运行时不会出现故障。目前,我在使用VS2013的PC上。在创建Win32 Console应用程序时,我向标准设置中添加了一些内容。通常,它会为您设置ProjectTitle.cpp和stdafx.cpp,其中包含stdafx.h 下面是Calc示例中包含main的文件的样子 #include "calc6.hpp" #include "stdafx.h" /* I ADDED THIS, AS IT COMES
#include "calc6.hpp"
#include "stdafx.h" /* I ADDED THIS, AS IT COMES AS BOILERPLATE WITH VS PROJECT
template <typename Grammar>
bool compile(Grammar const& calc, std::string const& expr)
{
using ascii::space;
std::string::const_iterator iter = expr.begin();
std::string::const_iterator end = expr.end();
bool r = phrase_parse(iter, end, calc, space);
if (r && iter == end)
{
std::cout << "-------------------------\n";
std::cout << "Parsing succeeded\n";
std::cout << "-------------------------\n";
return true;
}
else
{
std::cout << "-------------------------\n";
std::cout << "Parsing failed\n";
std::cout << "-------------------------\n";
return false;
}
}
struct var_printer
{
var_printer(std::vector<int> const& stack)
: stack(stack)
{
}
template <typename String, typename Data>
void operator()(String const& s, Data const& data)
{
std::cout << " " << s << ": " << stack[data] << std::endl;
}
std::vector<int> const& stack;
};
int
_tmain() // I CHANGED THIS FROM MAIN TO _TMAIN
{
std::cout << "/////////////////////////////////////////////////////////\n\n";
std::cout << "Expression parser...\n\n";
std::cout << "/////////////////////////////////////////////////////////\n\n";
std::cout << "Type some statements... ";
std::cout << "Then type period ('.') to compile, run and print results\n\n";
typedef std::string::const_iterator iterator_type;
typedef statement<iterator_type> statement;
vmachine mach; // Our virtual machine
std::vector<int> code; // Our VM code
statement calc(code); // Our grammar
std::string str;
std::string program;
while (std::getline(std::cin, str))
{
if (str.empty() || str[0] == '.')
break;
program += str;
}
if (::compile(calc, program))
{
mach.execute(code, calc.nvars);
std::cout << "Results------------------\n\n";
calc.vars.for_each(var_printer(mach.get_stack()));
std::cout << "-------------------------\n\n";
}
std::cout << "Bye... :-) \n\n";
return 0;
}
并改为
_tmain()
所有其他.cpp和.hpp文件都按原样复制。在这一点上,我得到:为编辑错误消息道歉
Error 4 error LNK2019: unresolved external symbol "public: __thiscall
statement<class std::_String_const_iterator<class std::_String_val<struct
std::_Simple_types<char> > > >::statement<class
std::_String_const_iterator<class std::_String_val<struct
std::_Simple_types<char> > > >(class std::vector<int,class
std::allocator<int> > &)"
(??0?$statement@V?$_String_const_iterator@V
$_String_val@U?$_Simple_types@D@std@@@std@@@std@@@@QAE@AAV?$vector@HV
$allocator@H@std@@@std@@@Z)
referenced in function _wmain
c:\Users\housegroup\documents\visual studio2013\Projects\example\example\calc6.obj example
在![3]丁。否则,它至少在我注释它时编译,例如,如果我将所有的"tmau"保留为空
请帮助,我几乎从未使用过Visual Studio:删除所有头文件并将其重新添加到头文件文件夹修复了此问题。以前,我把它都放在sourcefiles文件夹中
Error 4 error LNK2019: unresolved external symbol "public: __thiscall
statement<class std::_String_const_iterator<class std::_String_val<struct
std::_Simple_types<char> > > >::statement<class
std::_String_const_iterator<class std::_String_val<struct
std::_Simple_types<char> > > >(class std::vector<int,class
std::allocator<int> > &)"
(??0?$statement@V?$_String_const_iterator@V
$_String_val@U?$_Simple_types@D@std@@@std@@@std@@@@QAE@AAV?$vector@HV
$allocator@H@std@@@std@@@Z)
referenced in function _wmain
c:\Users\housegroup\documents\visual studio2013\Projects\example\example\calc6.obj example
statement calc(code)