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"怎么解决