我正在视觉工作室2008中进行c ++移植/开发。 我收到了以下问题。
1)不允许使用可变大小的数组。 2)为类的任何未定义函数链接错误,即使它们未被引用。(错误LNK2001:未解析的外部符号" public:virtual void __thiscall ...)
我认为这些与c ++语言VS2008支持的版本有关。
我正在尝试编译和链接大型c ++代码库。我无法用new / alloc替换变量大小的数组。请给我解决方案,以便我可以使用现有代码。
任何人都可以帮我解决这个问题吗?
但是下面的代码在同一个VS2008中运行良好
class Hello
{
public:
int a;
public:
virtual void add();
};
class bye : public Hello
{
public:
int y;
public:
void add();
};
int main()
{
std::cout << "got";
}
我哪里错了?
答案 0 :(得分:1)
如果您在任何地方创建了一个类的单个实例,则虚拟函数被视为“已使用”。链接错误表明某些虚拟功能未实现。由于错误列表所有这些都是名称,找到它们一定是一项微不足道的任务,如果你没有包含一些代码,使用不同的选项编译,或者它们确实在源代码中未实现,那么最终弄清楚 - 在这种情况下你可以添加调用terminate的空白实现。
对于VLA问题:VS2008期间不存在这种情况。即使你等了几年,VS201y将在C ++ 14中实现类似于VLA的新东西,它也不会回到你选择的编译器。 (有点奇怪,如果你让我选择一个已经失去支持的5岁的虫子,而不是现在......)
但std::vector
与VLA几乎相同,如果你发现不同,你可以编写一个beter包装器或一些适配器函数。无论如何,内存分配的地方不是你可以在程序中合法发现的东西。如果你遇到了一些性能瓶颈,这种变化值得怀疑,你可以重新安排一小部分代码。
答案 1 :(得分:0)
如何使用std :: vector替换数组?