Visual Studio2019でC++のSourceをコンパイルしよとしています。 LNK2019のエラーが発生し、 『 Date@@QAE@XZが関数mainで参照されました。 未解決の外部シンボル"public" _thsicall Date::Date 』 と出力されています。 何かライブラリが足りないのでしょうか? また足りないのであれば何を参照できるようにすればよいのでしょうか? 何卒、ご回答をよろしくお願いいたします。
Date というクラス名に心当たりはありませんか? エラーメッセージは「Dateクラスのコンストラクタ定義が見つからない」と言っているようです。宣言だけは存在するのでコンパイルフェーズは問題ないが、定義が存在しないためリンク時エラー(LNK2019)となります。
ご回答ありがとうございます。
以下の二つの構文を読み込んでいます。
これでは足らないといううことでしょうか?
---------------------------------------------------
/******Datetest2.cpp*******/
#include <iostream>
#include "test50.h"
using namespace std;
int main() {
const Date birthday(1963, 1, 18);
Date day[3];
cout << "birthday = " << birthday << '\n';
cout << "birthdayの文字列表現 :\" " << birthday.to_string() << "\"\n";
for (int i = 0; i < 3; i++)
cout << "day[" << i << "]の文字列表現:\" << day[i].to_string() << "\"\n";
}
ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
/****test50.h****/
#ifndef ___Class_Date
#define ___Class_Date
#include <iostream>
class Date {
int y;
int m;
int d;
public:
Date();
Date(int yy, int mm = 1, int dd = 1);
int year() const { return y; }
int month() const { return m; }
int day() const { return d; }
Date precending_day() const;
std::string to_string() const;
int day_of_week() const;
};
std::ostream& operator<<(std::ostream& s, const Date& x);
std::istream& operator>>(std::istream& s, Date& x);
#endif
すみません。
原因がわかりました。
関数定義のファイルが読み込めていないようです。
申し訳ございません。
ありがとうございます。
ファイルを以下に書き換えてコンパイルしたら、
ひとつだけエラーが消えないです。
エラー内容は安全でないと警告しているようですが、
何がダメなのでしょうか?
エラー箇所は、
struct tm* local = localtime(¤t);
の部分のようです。
何卒、ご回答のほど宜しくお願いいたします。
エラー内容は下記です。
エラー C4996 'localtime': This function or variable may be unsafe. Consider using localtime_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. Datetest2.cpp 12
------------------------------------------------------------------------------
#include <ctime>
#include <sstream>
#include <iostream>
#include "test50.h"
using namespace std;
Date::Date()
{
time_t current = time(NULL);
struct tm* local = localtime(¤t);
y = local->tm_year + 1900;
m = local->tm_mon + 1;
d = local->tm_mday;
}
Date::Date(int yy, int mm, int dd)
{
y = yy;
m = mm;
d = dd;
}
string Date::to_string() const
{
ostringstream s;
s << y << "年" << m << "月" << d << "日";
return s.str();
}
int main() {
const Date birthday(1963, 1, 18);
Date day[3];
cout << "birthday = " << birthday << '\n';
cout << "birthdayの文字列表現 :\" " << birthday.to_string() << "\"\n";
for (int i = 0; i < 3; i++)
cout << "day[" << i << "]の文字列表現:\"" << day[i].to_string() << "\"\n";
}
あまりコメント欄にソースを貼り付けると、見づらいので回答が付きにくくなると思います。質問の本文にマークダウンを使って追記されたほうが良いです。
ちなみにエラーの内容は読まれましたか?翻訳サイトなどで機械翻訳するだけでもかなり意味が読み取れる日本語になります。一度利用されてみることをお勧めします。
エラーメッセージに書かれている通りです。
localtime_sを使ったコードに書き換えるか、
includeより前で_CRT_SECURE_NO_WARNINGSをdefineするか、
プロジェクトのプロパティページで"C/C++"-"プリプロセッサ"-"プリプロセッサの定義"に_CRT_SECURE_NO_WARNINGSを追加すれば出なくなります。
というか本筋のリンクエラーはすでに解決済みのようなので質問を閉じてください。
お忙しい中、ご回答ありがとうございます。
解決済にしてください
あなたの回答
tips
プレビュー