Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 指针(结构的引用)作为函数赋值的参数_C++_Pointers_Structure_Arguments_Assign - Fatal编程技术网

C++ 指针(结构的引用)作为函数赋值的参数

C++ 指针(结构的引用)作为函数赋值的参数,c++,pointers,structure,arguments,assign,C++,Pointers,Structure,Arguments,Assign,我是一个编程新手,如果我的问题太傻,我会提前道歉 < >我的C++项目被编译为Excel的库.XLL DLL,框架代码程序入口点编码正确,工作稳定。自定义函数是独立的模块 // header.h typedef struct _TMDYDate { long month; long day; long year; } TMonthDayYear; 文件funcs.c有一个函数: // funcs.c #include "header.h" __declspec(dll

我是一个编程新手,如果我的问题太傻,我会提前道歉

< >我的C++项目被编译为Excel的库.XLL DLL,框架代码程序入口点编码正确,工作稳定。自定义函数是独立的模块

// header.h
typedef struct _TMDYDate {
    long month;
    long day;
    long year;
} TMonthDayYear;
文件funcs.c有一个函数:

// funcs.c
#include "header.h"

__declspec(dllexport) long GetDate() {
    TMonthDayYear myDate;
    myDate.day = 1 ;
    myDate.month = 1;
    myDate.year = 2000;

    if (DateToMDY(2004, &myDate) != 1) {
        return 0;
    }

    return myDate.year;
}
其中函数DateToMDY在单独的文件Dates.c中声明:

有趣的是,当我将DateToMDY的声明移动到funcs.c文件中时,调用DateToMDY的地方也一样——没有错误

我认为这是因为内存使用错误,但对我来说,隔离不同模块中的功能是至关重要的,例如dates.c、array.c、sorting.c


我不知道在哪里查找,可能是我有错误的项目编译设置。

您似乎从一个不可见其声明的位置调用了该函数。如果您这样做,则编译程序不知道参数应该具有什么类型,因此它会将它们全部作为int传递


从另一个.c文件调用的函数应该在相应的.h文件中声明,并包含在使用该函数的所有.c文件中。

我认为从函数声明不可见的地方调用函数是不可能的。这样的代码是不可能的compiled@Anton:如果使用旧的C语言规则,实际上可以。最初你不必声明参数或返回值,只要它们都是int类型。如果你在许可模式下运行你的C编译器,这仍然有效。非常有趣的是,我不知道这种可能性,如果不是结构类型,我传递普通类型,如long或double,那么另一个.C文件中的函数工作正常
// dates.c

int DateToMDY (long tmpyear, TMonthDayYear *mdy) {
    mdy->year = tmpyear; // <- Error is here
    return 1;
}
Unhandled exception at 0x0e342b84 (alcDates.xll) in EXCEL.EXE: 0xC0000005: Access violation writing location 0x40e3db28