vc2008中 fatal error LNK1169: 找到一个或多个多重定义的符号
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vc2008中 fatal error LNK1169: 找到一个或多个多重定义的符号相关的知识,希望对你有一定的参考价值。
具体情况是这样的
我的程序里有
class.h(我自己的文件) stdafx.h targetver.h stdafx.cpp test.cpp(我自己的文件)
class.h中有
#pragma once
class num
private:
int k;
public:
void show();
void get();
;
void num::show()
cout<<k;
void num::get()
cin>>k;
stdafx.h里面有
#pragma once
#include "targetver.h"
#include <stdio.h>
#include <tchar.h>
#include <iostream>
using namespace std;
#include "class.h"
targetver.h里面有
#pragma once
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0600
#endif
stdafx.cpp里面有
#include "stdafx.h"
test.cpp里面有
#include "stdafx.h"
int main()
num i;
i.get();
return 0;
编译时发现可创建num类对象i,就是不能使用成员函数就是"i.get()"报错,报错为
fatal error LNK1169: 找到一个或多个多重定义的符号
只要不用成员函数,就可以通过
百度知道把我的正常提问删了 我只好换一个号重新提问了 要是以前有回答过的谢谢了
你的两个cpp,也就是stdafx.cpp和test.cpp里都去编译类的实现了,也就是这段:
void num::show()
cout<<k;
void num::get()
cin>>k;
所以在链接的时候会报错多重定义。
一般习惯上把类的声明写在头文件里,实现写在cpp里 参考技术A class.h里,函数定义部分改成:
inline void num::show() // 前面加inline
cout<<k;
inline void num::get() // 前面加inline
cin>>k;
另外个办法是:不加inline,但是把这两个函数实现移动到test.cpp文件里(或者新添加一个class.cpp)。
以上是关于vc2008中 fatal error LNK1169: 找到一个或多个多重定义的符号的主要内容,如果未能解决你的问题,请参考以下文章
VC连接mysql数据库错误:libmysql.lib : fatal error LNK1113: invalid machine 解决方法
VC6 LINK : fatal error LNK1168: cannot open Debug/Test.exe for writing
LINK : fatal error LNK1104: 无法打开文件“libboost_serialization-vc90-mt-gd-1_62.lib”
WINDOWS编译ffmpeg:LINK : fatal error LNK1104: 无法打开文件“LIBCMT.lib”
VC2010编译提示 LINK : fatal error LNK1104: 无法打开文件“libboost_system-vc100-mt-gd-1_51.lib”
win7下用vc++6.0出现LINK : fatal error LNK1104: cannot open file "Debug/1.exe"怎么解决