未解析的外部符号错误,仅在标头中定义函数时有效
unresolved extern symbol error, only works when define function in the header
大家好,我在这里的第一篇帖子,如果我的风格让你感到恼火,请告诉我我想学习如何在这里发帖。我希望有人能帮我处理这个LNK2019
错误
我得到了两个源文件,战列舰.cpp和tester.cpp,main()
函数位于Leetcode.cpp程序将不会编译并给出错误LNK1120
和LNK2019
虽然如果我把Solution
类函数定义放在头文件battleship.h
中,程序实际上是编译的(到目前为止对原型运行良好),但我不确定这是否是一个好的做法,因为这些函数不是模板函数,我无法证明把它们放在.h
文件中是合理的
错误消息:
Severity Code Description Project File Line Suppression State
Error LNK2019 unresolved external symbol "public: int __thiscall tom::Solution::boardPrinter(class std::vector<class std::vector<char,class std::allocator<char> >,class std::allocator<class std::vector<char,class std::allocator<char> > > > &)" (?boardPrinter@Solution@tom@@QAEHAAV?$vector@V?$vector@DV?$allocator@D@std@@@std@@V?$allocator@V?$vector@DV?$allocator@D@std@@@std@@@2@@std@@@Z) referenced in function "int __cdecl tom::battleshipTester(void)" (?battleshipTester@tom@@YAHXZ) Leetcode C:UsersShindocumentsvisual studio 2015ProjectsLeetcodeLeetcodetester.obj 1
和战列舰.cpp的代码
#include "stdafx.h"
namespace tom{
class Solution{
public:
int countBattleships(std::vector<std::vector<char>>& board) {
return 0;
}
int boardPrinter(std::vector<std::vector<char>>& board)
{
return 0;
}
int Solution::simpleBoardBuilder(std::vector<std::vector<char>>& board)
{
return 0;
}
};
}
和战列舰的代码。h
#pragma once
#include "stdafx.h"
namespace tom {
class Solution {
public:
int countBattleships(std::vector<std::vector<char>>& board);
int boardPrinter(std::vector<std::vector<char>>& board);
int simpleBoardBuilder(std::vector<std::vector<char>>& board);
};
}
tester.cpp的代码
#include "stdafx.h"
#include "battleship.h"
namespace tom {
int battleshipTester(void)
{
//called in main function
//call countBattleships
std::vector<std::vector<char>> board;
Solution baseline;
baseline.countBattleships(board);
baseline.boardPrinter(board);
baseline.simpleBoardBuilder(board);
return 0;
}
}
tester.h的代码
#pragma once
#include "stdafx.h"
namespace tom {
int battleshipTester(void);
//int simple
}
Leetcode.cpp的代码,其中主函数也是
// Leetcode.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "tester.h"
int main()
{
tom::battleshipTester();
return 0;
}
您的代码中存在多个问题:
Battleship.h
不包含在Battleship.cpp
中- 您已定义
class Solution
两次 - 您已经在实现(
.cpp
)文件中定义了class Solution
- 您尚未将
tester.h
包含在tester.cpp
中
错误消息的字面意思是编译器找不到您声明的函数的定义。这是真的;Battleship.cpp
不包括在内,因此编译器看不到定义。然而,即使它已经包含在内,您仍然会收到错误(请参阅上面的编号项目)。
除了nikaza已经回答了什么,请参阅以下评论。
countBattleships(std::vector<std::vector<char>>& board)
是错误的。你应该在<char>
之后有一个额外的空间,就像下面这样
countBattleships(std::vector<std::vector<char> >& board)
只有这样,您的代码才能编译。
虽然您在任何地方都使用了vector
,但我在任何文件中都看不到任何#include <vector>
。您可能希望在.h文件中#include <vector>
战列舰.cpp应该是这样的:
#include "battleship.h"
namespace tom{
int Solution::countBattleships(std::vector<std::vector<char> >& board) {
return 0;
}
int Solution::boardPrinter(std::vector<std::vector<char> >& board)
{
return 0;
}
int Solution::simpleBoardBuilder(std::vector<std::vector<char> >& board)
{
return 0;
}
}
tester.cpp应该是这样的:
#include "tester.h"
#include "battleship.h"
namespace tom {
int battleshipTester(void)
{
//called in main function
//call countBattleships
std::vector<std::vector<char> > board;
Solution baseline;
baseline.countBattleships(board);
baseline.boardPrinter(board);
baseline.simpleBoardBuilder(board);
return 0;
}
}
战列舰.h应该是这样的:
#pragma once
#include <vector>
namespace tom {
class Solution {
public:
int countBattleships(std::vector<std::vector<char> >& board);
int boardPrinter(std::vector<std::vector<char> >& board);
int simpleBoardBuilder(std::vector<std::vector<char> >& board);
};
}
tester.h应该是这样的:
#pragma once
namespace tom {
int battleshipTester(void);
//int simple
}
最后leetcode.cpp应该是这样的:
#include "tester.h"
int main()
{
tom::battleshipTester();
return 0;
}
相关文章:
- 在命名空间中定义函数还是限定函数
- 为什么在定义函数之前先声明它
- 使用用户定义函数的字符串反转
- 用户定义函数中的指针和输入
- 这个c++代码是如何在没有定义函数的情况下运行的
- 具有外部"c"和程序集的未定义函数
- 已定义函数时出现 G++ "未定义的引用"错误
- 将自定义函数传递到基抽象类中以延迟执行
- C++使用 rand 定义函数语法
- Arduino:在 loop() 和自定义函数中运行相同的代码时出现问题
- 将具有固定签名的自定义函数名称注入 CRTP
- 使用定义函数模板别名
- 是否可以使用单个定义定义函数的常量和常规版本?(使用模板,自动,decltype等)
- 在内联程序集中定义函数和从 C++ 调用时出现问题
- 在 Metal 着色器代码中,如何定义函数的 in/out 参数变量?
- 声明和定义函数静态会产生"undefined reference to function_name()"
- 朋友定义函数的名称空间是什么
- 介子 对用户定义函数的未定义引用
- 如何使用 "using" 关键字定义函数原型/签名
- 在 C 结构中定义C++函数