我有两个cpp文件,都需要调一个头文件定义的函数,但当我在两个cpp文件都引用这个头文件时,编译总是报错:
fatal error LNK1169: one or more multiply defined symbols found什么原因请教??

解决方案 »

  1.   

    你这两个cpp是不是本身有互相包含的关系?!
      

  2.   

    在头文件开头处加上
    #pragma once
      

  3.   

    我的cpp没有互相包含,但加#pragma once
    也不行啊
      

  4.   

    试试我么写来包含你的头文件
    #ifndef _YOURHEAD
    #define _YOURHEAD
    #include "你的头文件"
    #endif
      

  5.   

    #ifndef "??"
    #define "??"
    #include "my.h"
    #endif
      

  6.   

    在两个.cpp文件中:extern  函数的原型
    另外再建立一个.cpp文件,里面写上一句: #include "那个头文件"
      

  7.   

    另外在原来的两个.cpp文件中不要再  #include "那个头文件" 了
      

  8.   

    两个cpp文件都引用这个头文件那这个头文件不能包含有全局变量的定义,不能包含非内联函数定义。可以包含函数声明、内联函数定义、宏定义、外部变量声明等。因为每个cpp都会生成一个obj文件,在link时如果两个目标文件包括相同的全局标识就会出现multiply defined symbols的错误。
      

  9.   

    贴出代码,大家再帮帮忙,我有两个cpp文件,都需要调一个头文件定义的函数,但当我在两个cpp文件都引用这个头文件时,编译总是出错!<my.h>
    #include "StdAfx.h"
    #include <stdio.h>
    #pragma oncevoid GetTimeStr(char* Timestr)
    {
    SYSTEMTIME mytime;
    int j=0; GetSystemTime(&mytime); j = sprintf(Timestr,"%s", "--------  ");
    j += sprintf(Timestr+j,"%4d.%2d.%2d  ",mytime.wYear,mytime.wMonth,mytime.wDay);
    j += sprintf(Timestr+j,"%2d:%2d:%2d\0",mytime.wHour,mytime.wMinute,mytime.wSecond);
    j += sprintf(Timestr+j,"%s", "  -------- ");
    }<编译错误>DIALOG2.obj : error LNK2005: "void __cdecl GetTimeStr(char *)" (?GetTimeStr@@YAXPAD@Z) already defined in DIALOG1.obj
    Creating browse info file...