C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: LNK2019エラー


(過去ログ 119 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■69611 / inTopicNo.1)  LNK2019エラー
  
□投稿者/ OROCHI (6回)-(2014/01/13(Mon) 12:56:24)

分類:[C/C++] 

こんにちは。現在以下のようなコードを書いています

#include "stdafx.h"
#include <vector>
#include <list>
#include <algorithm>
#include <iostream>
#include <stdlib.h>
#include <iterator>
#include "etime.h"
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
int i,m = 100, n = 1000;
list<int> l,ll;
vector<int> v(n);
CETime e;
for(i=0; i<n; ++i) v[i] = i;
random_shuffle(v.begin(),v.end());
copy(v.begin(),v.end(),back_inserter(ll));
e.Reset();
for(i=0; i<m; ++i)
{
l = ll;
l.sort();
}
cout << e.Sec() << endl;
e.Reset();
for(i=0; i<m; ++i)
{
copy(ll.begin(),ll.end(),v.begin());
sort(v.begin(),v.end());
}
cout << e.Sec() << endl;
system("PAUSE");
return 0;
}

(etime.h)
#include <sys/types.h>

class CETime
{
time_t m_time;
unsigned short m_millitm;
public:
inline void Reset();
inline double Sec()const;
CETime(){Reset();}
};

(etime.cpp)
#include "stdafx.h"
#include "etime.h"
#include <sys/timeb.h>

void CETime::Reset()
{
timeb tb;
ftime(&tb);
m_time = tb.time;
m_millitm = tb.millitm;
}

double CETime::Sec()const
{
timeb tb;
ftime(&tb);
return double(tb.time - m_time) + 0.001*(tb.millitm - m_millitm);
}

これを実行すると
エラー 2 error LNK2019: 未解決の外部シンボル "public: void __thiscall CETime::Reset(void)" (?Reset@CETime@@QAEXXZ) が関数 _wmain で参照されました。
エラー 1 error LNK2019: 未解決の外部シンボル "public: double __thiscall CETime::Sec(void)const " (?Sec@CETime@@QBENXZ) が関数 _wmain で参照されました。
というエラーが出て実行不能になります。よくある外部リンクエラーらしいのでスペルミス、実態未定義、パブリックメンバーではないので参照不可も疑ってみたのですが、いずれも特に問題がないようでした

実行環境はWindows 7 64bit、Visual C++ 2010です

原因わかる型いらっしゃいますでしょうか?
引用返信 編集キー/
■69612 / inTopicNo.2)  Re[1]: LNK2019エラー
□投稿者/ 774RR (129回)-(2014/01/13(Mon) 14:35:16)
実験してないけど
> class CETime
> {
> inline void Reset();
> inline double Sec()const;
inline がいらない

引用返信 編集キー/
■69613 / inTopicNo.3)  Re[1]: LNK2019エラー
□投稿者/ しま (64回)-(2014/01/13(Mon) 16:43:25)
No69611 (OROCHI さん) に返信
> (etime.h)
> #include <sys/types.h>
>
> class CETime
> {
> time_t m_time;
> unsigned short m_millitm;
> public:
> inline void Reset();
> inline double Sec()const;
> CETime(){Reset();}
> };
>
> (etime.cpp)
> #include "stdafx.h"
> #include "etime.h"
> #include <sys/timeb.h>
>
> void CETime::Reset()
> {
> timeb tb;
> ftime(&tb);
> m_time = tb.time;
> m_millitm = tb.millitm;
> }
>
> double CETime::Sec()const
> {
> timeb tb;
> ftime(&tb);
> return double(tb.time - m_time) + 0.001*(tb.millitm - m_millitm);
> }
>
> これを実行すると
> エラー 2 error LNK2019: 未解決の外部シンボル "public: void __thiscall CETime::Reset(void)" (?Reset@CETime@@QAEXXZ) が関数 _wmain で参照されました。
> エラー 1 error LNK2019: 未解決の外部シンボル "public: double __thiscall CETime::Sec(void)const " (?Sec@CETime@@QBENXZ) が関数 _wmain で参照されました。
> というエラーが出て実行不能になります。よくある外部リンクエラーらしいのでスペルミス、実態未定義、パブリックメンバーではないので参照不可も疑ってみたのですが、いずれも特に問題がないようでした
>
> 実行環境はWindows 7 64bit、Visual C++ 2010です
>
> 原因わかる型いらっしゃいますでしょうか?

原因わかる「型」はいないでしょう。
ヒントです
.cpp に inline 関数の定義(実装)がかけるコンパイラーもありますが全てのコンパイラーではない
また、キーワード "inline" の使い方も適切とはいえない(宣言で使っているが、定義で使うのではないでしょうか?)
参考:
http://msdn.microsoft.com/ja-jp/library/78t98006(v=vs.100).aspx
http://funini.com/kei/c/prototype.shtml
引用返信 編集キー/
■69615 / inTopicNo.4)  Re[1]: LNK2019エラー
□投稿者/ OROCHI (8回)-(2014/01/13(Mon) 20:06:59)
774RRさん
ありがとうございました。inline使えないことあるのは初めて知りました

しまさん
最初のは誤植です(汗)失礼しました
コンパイラ側の問題もあるのですね。ありがとうございました
解決済み
引用返信 編集キー/
■69616 / inTopicNo.5)  Re[2]: LNK2019エラー
□投稿者/ επιστημη (95回)-(2014/01/13(Mon) 20:41:16)
> inline使えないことあるのは初めて知りました

inlineと宣言したからには、その定義はヘッダに置いとかないとinlineになれんです。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -