簡體   English   中英

clang:錯誤:鏈接器命令失敗,退出代碼為 1(使用 -v 查看調用)控制台應用程序

[英]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.cppItemToPurchase.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM