小编Kyl*_*leG的帖子

to extern"C"或not extern extern"C"[g ++ vs cl]

我正在将Numerical Recipes four1.c与Nayuki的FFT进行比较.两者都是C版本,但我使用的是C++驱动程序.为了进行比较,我正在使用CL.exe和g ++编译(或更恰当地说,链接)到可执行文件中.两人似乎都在争论是否使用extern"C"作为four1功能,但似乎都不关心Nayuki的.我为four1制作了一个头文件,检查_WIN32是为了适当切换,它可以工作,但似乎是一个完全无法接受的黑客攻击.我该如何解决这个问题?

这是头文件:

#pragma once
#ifdef _WIN32
extern "C" void four1(float data[], unsigned long nn, int isign);
#else
void four1(float data[], unsigned long nn, int isign);
#endif
Run Code Online (Sandbox Code Playgroud)

这就是CL没有外部"C"的情况:

drvr.obj : error LNK2019: unresolved external symbol "void __cdecl four1(float * const,unsigned long,int)" (?four1@@YAXQAMKH@Z) referenced in function _main
drvr.exe : fatal error LNK1120: 1 unresolved externals
Run Code Online (Sandbox Code Playgroud)

如果使用extern"C",这就是g ++的作用:

/tmp/ccK1Hb2N.o: In function `main':
drvr.cpp:(.text+0x347): undefined reference to `four1'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

适用于CL的内容不适用于g ++,适用于g ++的内容在CL中不起作用.至少对于这个文件.Nayuki代码不存在这样的问题.

我按照建议尝试修改头文件,所以现在这里是dfour1.h:

#pragma once …
Run Code Online (Sandbox Code Playgroud)

c c++ g++ extern-c cl

3
推荐指数
1
解决办法
128
查看次数

当单个单片文件没有时,C++ Struct Constructor与参数分隔成标题和实现文件失败

我已经多次看到这个问题,但基本答案似乎是多次包含头文件.在我的情况下,这不是问题,我不知道是什么.

我有一个基本的c ++文件似乎在这里正常工作:

// Filename : t1.cpp
#include <stdio.h>

struct T1{
    int result;

    T1(int var1, int var2) {
        result = var1 * var2;
    }
};

void main(void){
    T1 t(2, 3);
    printf("%d\n", t.result);
}
Run Code Online (Sandbox Code Playgroud)

编译并运行时,会产生答案6.大.现在,当我将这段代码分成两个文件,一个.cpp和一个.h时,我得到错误(错误C2011:'T1':'struct'类型重定义).这两个不同的文件是这样的:

//Filename : test1.h
#ifndef TEST_H
#define TEST_H

struct T1{
    int result;

    T1(int var1, int var2);
};
#endif

//Filename : test1.cpp
#include "test1.h"

struct T1{
    int result;

    T1(int var1, int var2) {
        result = var1 * var2;
    }
};
Run Code Online (Sandbox Code Playgroud)

我曾经尝试过使用#pragma一次,以及使用class而不是struct,但这并不重要.这里有些根本错误.我不明白它为什么在独立文件中工作,但在分成标题和实现版本时却不行.我需要对标头和实现文件做些什么?

c++

0
推荐指数
1
解决办法
43
查看次数

标签 统计

c++ ×2

c ×1

cl ×1

extern-c ×1

g++ ×1