私の大学の宿題としてC++で独自の "ベクトル"クラスを実行する必要があります私はテンプレートに苦労しています。ld:アーキテクチャx86_64でシンボルが見つかりませんでした。clang:エラー:リンカーコマンドが終了コード1で失敗しました(呼び出すには-vを使用します)
すべての変数の型を型テンプレート 'typename T'に変更すると、このエラーが発生します。コンパイラは "friend"関数として宣言されている関数を指しているだけです。つまり、コンパイラのメッセージから見て(事業者== 'と '< <'):アーキテクチャx86_64版のため
未定義のシンボル: "演算子==(ベクトルconstの&、ベクタCONST &)"、から参照: _main main.oで _main LD:記号(S)アーキテクチャx86_64の 打ち鳴らすが見つかりません:エラーから参照main.o "オペレータ< <(STD :: __ 1 :: basic_ostream> &、ベクトル)"、中:リンカーコマンドが終了コード1で失敗しました(呼び出しには-vを使用してください)
ここでは、ヘッダーファイル内の2つのフレンド演算子関数の宣言とその実装について説明します。私はあなたの助けを本当に感謝して、私はこのエラーを取得する理由を私は理解していない
#include <iostream>
#include "vector.hpp"
#include "vector.cpp"
using namespace std;
int main(){
Vector<double> second(10);
Vector<double> third {1.0, 2.0, 3.0, 4.0, 5.0};
cout << third << endl;
Vector<double> v(10);
Vector<double> k(10);
if(k == v){
cout << "YES" << endl;
}
else{
cout << "NO" << endl;
}
return 0;
}
:私はちょうどこの二つの演算子をテストしたmain()関数で
friend ostream& operator <<(ostream& out, Vector<T> x);
friend bool operator == (const Vector<T> &lop, const Vector<T> &rop);
template <typename T>
bool operator == (const Vector<T> &lop, const Vector<T> &rop){
if(lop.size() != rop.size()){
return false;
}
else{
int counter = 0;
for(int i = 0; i < lop.size(); i++){
for(int j = 0; j < rop.size(); j++){
if(lop.values[i] == rop.values[j]){
counter++;
}
}
if((counter == lop.size()) && (counter == rop.size())){
return true;
}
}
}
return false;
}
template <typename T>
ostream& operator <<(ostream& out, Vector<T> x)
{
out << "[";
for(int i = 0; i < x.size(); i++){
out << x.values[i];
if(i + 1 != x.size()){
out << ", ";
}
}
out << "]";
return out;
}
!
_ "とその実装" _この実装はどこですか? –
これらの2つのシンボルは 'main()'で参照されます。あなたの 'main()'関数はどこにありますか? –
@MartinZhai、ちょうど追加されました。 –