我不知道它有什么问题。我找不到错误的位置,注释掉实现并没有解决错误。
标题文件
#ifndef MAIN_SAVITCH_SEQUENCE_H
#define MAIN_SAVITCH_SEQUENCE_H
#include <cstdlib> // Provides size_t
namespace main_savitch_3
{
class sequence
{
public:
// TYPEDEFS and MEMBER CONSTANTS
typedef double value_type;
typedef std::size_t size_type;
static const size_type CAPACITY = 30;
// CONSTRUCTOR
sequence( );
// MODIFICATION MEMBER FUNCTIONS
void start( );
void advance( );
void insert(const value_type& entry);
void attach(const value_type& entry);
void remove_current( );
// CONSTANT MEMBER FUNCTIONS
size_type size( ) const;
bool is_item( ) const;
value_type current( ) const;
private:
value_type data[CAPACITY];
size_type used;
size_type current_index;
};
}
#endif
来源
#include "sequence1.h"
#include <assert.h>
namespace main_savitch_3
{
// Default constructer - sequence is empty
sequence::sequence()
{
used = current_index = 0;
}
// Start the iteration
void sequence::start()
{
current_index = 0;
}
// Iterate
void sequence::advance()
{
current_index++;
}
// Number of items in the sequence
sequence::size_type sequence::size() const
{
return used;
}
// Checks if there is a current item
bool sequence::is_item() const
{
return current_index <= used && used > 0;
}
// Returns the current value
sequence::value_type sequence::current() const
{
assert(is_item()); // no current item
return data[current_index];
}
// Adds an item BEFORE the current index
void sequence::insert(const value_type& entry)
{
assert(entry != 0); // pointer is invalid
assert(current_index < sequence::CAPACITY); // no room to add an item
// move items up - starting with the last item and working down to the current item
// arrays start at 0, so the -1 adjusts it
for (size_type i = used - 1; i >= current_index; i--)
data[i + 1] = data[i];
data[current_index] = entry;
}
// Adds an item AFTER the current index
void sequence::attach(const value_type& entry)
{
assert(entry != 0); // pointer is invalid
assert(current_index < sequence::CAPACITY); // no room to add an item
// move items up - starting with the last item and working down to the current item
// arrays start at 0, so the -1 adjusts it
for (size_type i = used - 1; i > current_index; i--)
data[i + 1] = data[i];
if (current_index = 0)
data[used] = entry;
else
data[current_index + 1] = entry;
}
// Removes the current item
void sequence::remove_current()
{
for (size_type i = current_index; i < used; i++)
data[i] = data[i + 1];
}
}
答案 0 :(得分:68)
即使您的项目采用main()
方法,链接器有时也会感到困惑。您可以通过转到
项目 - &gt;属性 - &gt;配置属性 - &gt;链接器 - &gt;系统
并将SubSystem
更改为控制台。
答案 1 :(得分:35)
我们也有这个问题。我的同事找到了解决方案。它变成了对第三方库标题中“main”的重新定义:
#define main SDL_main
所以解决方案是添加:
#undef main
在我们的主要功能之前。
这显然是愚蠢的!
答案 2 :(得分:22)
如果您的项目中有_tmain
功能,则需要include <tchar.h>.
答案 3 :(得分:16)
您需要main()
功能,以便程序知道从哪里开始。
答案 4 :(得分:9)
如果有人错过了显而易见的事;请注意,如果您构建GUI应用程序并使用
link-args中的“ -subsystem:windows ”,应用程序条目是 WinMain @ 16 。不是主()。因此,您可以使用此代码段来调用main():
#include <stdlib.h>
#include <windows.h>
#ifdef __GNUC__
#define _stdcall __attribute__((stdcall))
#endif
int _stdcall
WinMain (struct HINSTANCE__ *hInstance,
struct HINSTANCE__ *hPrevInstance,
char *lpszCmdLine,
int nCmdShow)
{
return main (__argc, __argv);
}
答案 5 :(得分:6)
您是否实施了main()
功能?
int main(int argc, char **argv) {
... code ...
return 0;
}
<强> [编辑] 强>
您在另一个源文件中有main()
,因此您可能忘记将其添加到项目中。
添加现有源文件:在解决方案资源管理器中,右键单击源文件文件夹,指向添加,然后单击“确定”。 现有项目。现在选择包含main()
答案 6 :(得分:4)
如果您使用的是Visual Studio。您可能收到此错误的原因可能是因为您最初创建了一个新的头文件.h然后将其重命名为file.cpp,您放置了main()函数。
要解决此问题,请右键单击file.cpp - &gt;单击属性 去 配置属性 - &gt;常规 - &gt;项目类型并将其值更改为 C / C ++编译器而不是C / C ++头。
答案 7 :(得分:3)
尽管我遇到了这个问题:
main()
;和我的最终解决方案如下:
main()
位于命名空间中,因此被有效地称为something::main()
...删除此命名空间可以解决问题。答案 8 :(得分:2)
我在Visual Studio 2013中处理DLL项目时遇到了LNK2019错误。
我在项目中添加了一个新配置。但是Visual Studio没有将“配置类型”作为“动态库”,而是将其添加为“应用程序”。 这导致了LNK2019错误。
通过转到Project - &gt;修复了LNK2019错误。属性 - &gt;配置属性 - &gt;一般并将“配置类型”更改为“动态库(.dll)”和“目标扩展”为“.dll”。
是的,最初的问题是关于控制台/应用程序项目,这是一个与我的答案不同的问题。但我相信添加这个答案可能会帮助某人(像我一样)偶然发现这个问题。
答案 9 :(得分:1)
在 Visual Studio 中,项目属性,用于 x86、x64、发布和调试配置
链接器 > 系统 > 子系统
对于 /SUBSYSTEM:WINDOWS
需要以下主要内容(注意这是针对 unicode、宽字符版本):
#include <Windows.h>
int WINAPI wWinMain(_In_ HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPWSTR lpCmdLine,
int nCmdShow)
{
return 0;
}
对于 /SUBSYSTEM:CONSOLE
需要以下主要内容:
int main(int argc, char* argv[], char* environment[]){
return 0;
}
答案 10 :(得分:0)
您似乎没有主要功能,它应该是您程序的入口点。
答案 11 :(得分:0)
我的问题是别的
我在一个没有实现的类中有一个方法。
像这样:
class Hello {
public:
// ...
void PrintHelloWorld();
// ...
};
当我调用该方法时出现错误:
hello().PrintHelloWorld();
<块引用>
错误:LNK2019 未解析的外部符号“public: void __thiscall Hello::PrintHelloWorld(void)” (?PrintHelloWorld@Hello@@QAEXXZ) 在函数 _main demo 中引用。\Peyman\source\repos\demo\demo\demo。对象 1
事实上,我使用了一个没有实现的 SDK,它会导致错误。
请检查是否有任何实施。
void PrintHelloWorld(){}
带括号
答案 12 :(得分:-2)
转到“项目 - 属性 - 配置属性 - 链接器 - 输入 - 附加依赖项”,然后转到结尾并键入“; ws2_32.lib”。
答案 13 :(得分:-2)
尝试使用return 0;
如果仍然失败,请将您的解决方案平台更改为64x而不是86x 并转到配置管理器(即您将86x更改为64x) 并将其设置为64位
对我有用,希望对您有用