質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

3350閲覧

Visual studioにおける”再定義されています.異なるリンケージです”というエラー

muton

総合スコア31

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/12/10 08:02

該当のソースコード

C++

1 2/*************************************************************************** 3 4 file : portability.h 5 created : Fri Jul 8 15:19:34 CET 2005 6 copyright : (C) 2005 Bernhard Wymann 7 email : berniw@bluewin.ch 8 version : $Id: portability.h,v 1.2.2.3 2012/05/19 14:47:30 berniw Exp $ 9 10 ***************************************************************************/ 11 12/*************************************************************************** 13 * * 14 * This program is free software; you can redistribute it and/or modify * 15 * it under the terms of the GNU General Public License as published by * 16 * the Free Software Foundation; either version 2 of the License, or * 17 * (at your option) any later version. * 18 * * 19 ***************************************************************************/ 20 21#ifndef _TORCS_PORTABILITY_H_ 22#define _TORCS_PORTABILITY_H_ 23 24#include <stdlib.h> 25#include <cstring> 26 27#ifdef WIN32 28#define HAVE_CONFIG_H 29#endif 30 31#ifdef HAVE_CONFIG_H 32#include <config.h> 33#endif 34 35// Missing strndup, define it here (for FreeBSD). 36// TODO: Move it into library. 37// strndup code provided by Thierry Thomas. 38#ifndef HAVE_STRNDUP 39 40static char *strndup(const char *str, int len) 41{ 42 char *ret; 43 44 if ((str == NULL || len < 0)) { 45 return (NULL); 46 } 47 48 ret = (char *) malloc(len + 1); 49 if (ret == NULL) { 50 return (NULL); 51 } 52 53 memcpy(ret, str, len); 54 ret[len] = '\0'; 55 return (ret); 56} 57 58#endif 59 60 61#ifdef WIN32 62#define snprintf _snprintf 63#if _MSC_VER < 1500 64#define vsnprintf _vsnprintf 65#endif 66#endif 67 68#ifdef WIN32 69#include <math.h> 70 71static float round(float x) 72{ 73 return floor(x+0.5f); 74} 75#endif 76 77#endif // _TORCS_PORTABILITY_H_ 78

発生している問題・エラーメッセージ

torcsというオープンソースコードのカーシュミレーションソフトの プロジェクトファイルをコンパイルしたいと考えています. そこで,上記のコードをVisual studio 2017においてビルドを行うと, static float round(float x)の以下のエラーが発生してしまいます. 対策としてどのようなことが考えられるでしょうか. 宜しくお願い致します. 重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 エラー C2375 'round': 再定義されています。異なるリンケージです。 olethros c:\users\owner\desktop\torcs-1.3.7\export\include\portability.h 70

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

C99以降roundはすでにあります。

double round( double arg );

ただ、Visual StudioはC99規格に対応しきれてないとかいろいろあるので自力定義していたのでしょう。

c

1#ifdef WIN32 2#include <math.h> 3 4static float round(float x) 5{ 6 return floor(x+0.5f); 7} 8#endif

c

1#ifdef WIN32 2#include <math.h> 3#if _MSC_VER < 1900 4static float round(float x) 5{ 6 return floor(x+0.5f); 7} 8#endif 9#endif

に書き換えで動くかな と思います。

投稿2018/12/10 08:32

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

muton

2018/12/10 08:42

回答ありがとうございます. ご指摘通り変更したところ,エラーが発生しなくなりました.
muton

2018/12/10 08:53

このように書き換えたことでエラーが発生しなくなったことについて, 簡単にでもよろしいのでご教授お願いできないでしょうか.
asm

2018/12/10 10:40

> #if _MSC_VER < 1900 が、VisualStudio 2015以降のコンパイラだと当てはまらないので > static float round(float x) > { > return floor(x+0.5f); > } が無効になります 2015以降にした理由はmaisumakunさんの回答見た結果 2015にはround関数がありそうだと判断したからです
muton

2018/12/10 10:51

理解することができました.丁寧に回答ありがとうございました.
guest

0

<math.h>にあるroundMSDN)と自作のroundが衝突しています。

処理系で対応しているので、自前のコードにあるround関数は消してしまっていいでしょう。

投稿2018/12/10 08:29

編集2018/12/10 08:31
maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

muton

2018/12/10 08:43

回答ありがとうございます. 無知で申し訳ございません.自前のround関数とはどの部分でしょうか. 宜しくお願い致します.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問