[英]clang: error: linker command failed with exit code 1 (use -v to see invocation) when linking library in cmake
[英]clang: error: linker command failed with exit code 1 (use -v to see invocation) console app
這段代碼應該可以工作,但我收到鏈接器錯誤。 我不知道去哪里解決這個問題。 我一直在看關於可可豆的事情,但我沒有可可豆。
//main.cpp
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include "ItemToPurchase.cpp"
#include "ItemToPurchase.hpp"
int main(int argc, const char * argv[]) {
// insert code here...
// create objects
ItemToPurchase item1;
//ItemToPurchase item2;
std::cout << "Item1" << std::endl;
item1.setName();
//item1.SetPrice();
//item1.SetQuantity();
std::cout << "Item2" << std::endl;
//item2.setName();
//item2.SetPrice();
//item2.SetQuantity();
//test
std::cout << std::endl << std::endl;
//item1.getName();
//item1.GetPrice();
//item1.GetQuantity();
return 0;
}
這是 ItemToPurchase 類 cpp 文件
//ItemToPurchase
#include "ItemToPurchase.hpp"
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
std::string ItemToPurchase::setName(){
std::cout << "Enter the item name: " << std::endl;
std::cin >> ItemToPurchase::ItemName;
return ItemToPurchase::ItemName;
}
/*
std::string ItemToPurchase::getName() {
return ItemToPurchase::ItemName;
}
int ItemToPurchase::SetPrice(){
std::cout << "Enter the item price: " << std::endl;
std::cin >> ItemToPurchase::ItemPrice;
return ItemToPurchase::ItemPrice;
}
int ItemToPurchase::GetPrice(){
return ItemToPurchase::ItemPrice;
}
int ItemToPurchase::SetQuantity() {
std::cout << "Enter the Quantity: " << std::endl;
std::cin >> ItemToPurchase::ItemQuantity;
return 0;
}
int ItemToPurchase::GetQuantity() {
return ItemToPurchase::ItemQuantity;
}
*/
這是該 cpp 文件的頭文件,它只有類聲明。
#ifndef ItemToPurchase_hpp
#define ItemToPurchase_hpp
#include <stdio.h>
#include <stdlib.h>
#include <string>
class ItemToPurchase {
public:
std::string setName();
std::string getName();
int SetPrice();
//int GetPrice();
//int GetQuantity();
//int SetQuantity();
//ItemToPurchase();
private:
std::string ItemName = "none";
int ItemPrice = 0;
int ItemQuantity = 0;
} items;
#endif /* ItemToPurchase_hpp */
這是完整的錯誤
duplicate symbol __ZN14ItemToPurchase7setNameEv in:
/Users/devintripp/Library/Developer/Xcode/DerivedData/zybooksLab4-alhksylvtcikaegvkzyxidlzoyib/Build/Intermediates.noindex/zybooksLab4.build/Debug/zybooksLab4.build/Objects-normal/x86_64/ItemToPurchase.o
/Users/devintripp/Library/Developer/Xcode/DerivedData/zybooksLab4-alhksylvtcikaegvkzyxidlzoyib/Build/Intermediates.noindex/zybooksLab4.build/Debug/zybooksLab4.build/Objects-normal/x86_64/main.o
duplicate symbol _items in:
/Users/devintripp/Library/Developer/Xcode/DerivedData/zybooksLab4-alhksylvtcikaegvkzyxidlzoyib/Build/Intermediates.noindex/zybooksLab4.build/Debug/zybooksLab4.build/Objects-normal/x86_64/ItemToPurchase.o
/Users/devintripp/Library/Developer/Xcode/DerivedData/zybooksLab4-alhksylvtcikaegvkzyxidlzoyib/Build/Intermediates.noindex/zybooksLab4.build/Debug/zybooksLab4.build/Objects-normal/x86_64/main.o
ld: 2 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
如果main.cpp和ItemToPurchase.cpp分開編譯,則setName
方法的定義是重復的,因為第一個定義在main.cpp 中(行#include "ItemToPurchase.cpp"
包含了setName
定義所在的源文件的內容)和第二個定義在ItemToPurchase.cpp
。 因此,要解決此問題,您應該從main.cpp
文件中刪除#include "ItemToPurchase.cpp"
。
第二個問題,不能在頭文件中定義變量,看ItemToPurchase
類的定義
class ItemToPurchase {
public:
//...
} items; // you have defined items variables in header
你應該刪除items
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.