簡體   English   中英

Netbeans 10:錯誤:鏈接器命令失敗,退出代碼為1(使用-v查看調用)

[英]Netbeans 10: error: linker command failed with exit code 1 (use -v to see invocation)

我是C ++的新手。 我對這個問題迷失了方向(我已經檢查並嘗試過在Stack Overflow上遇到這個問題的其他解決方案,但是由於某些原因,我無法解決它)。 我有以下文件-

stdafx.h中

#ifndef STDAFX_H
#define STDAFX_

#endif /* STDAFX_H */

#pragma once

#include <iostream>
#include <cstdlib>
#include <cmath>

geometry.h

#ifndef GEOMETRY_H
#define GEOMETRY_H



#endif /* GEOMETRY_H */

#pragma once

double PI = 3.1415;

class Circle    {
public:
    double radius;
    double area() const;
    double circumference() const;
};

geometry.cpp

#include "geometry.h"

double Circle::area() const {
    return PI*radius*radius;
}

double Circle::circumference() const {
    return 2*PI*radius;
}

main.cpp中

#include "stdafx.h"
#include "geometry.h"

using namespace std;

int main() {
    Circle c;
    c.radius = 2.0;
    cout << c.area();
    cout << c.circumference();
}

我得到的錯誤是-

> cd '/Users/arpanganguli/NetBeansProjects/Chapter8'
/usr/bin/make -f Makefile CONF=Debug
"/Library/Developer/CommandLineTools/usr/bin/make" -f nbproject/Makefile- 
Debug.mk QMAKE= SUBPROJECTS= .build-conf
"/Library/Developer/CommandLineTools/usr/bin/make"  -f nbproject/Makefile- 
Debug.mk dist/Debug/GNU-MacOSX/chapter8
mkdir -p dist/Debug/GNU-MacOSX
g++     -o dist/Debug/GNU-MacOSX/chapter8 build/Debug/GNU-MacOSX/geometry.o 
build/Debug/GNU-MacOSX/main.o 
duplicate symbol _PI in:
build/Debug/GNU-MacOSX/geometry.o
build/Debug/GNU-MacOSX/main.o
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see 
invocation)
make[2]: *** [dist/Debug/GNU-MacOSX/chapter8] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2

我不明白我在做什么錯? 我在MacOS上使用Netbeans 10(如果此信息有幫助)。 我認為該錯誤試圖告訴我的是,我兩次鏈接相同的文件,但是如果我不喜歡通過geometry.h來訪問main.cpp和geometry.cpp,我將無法在main中調用該函數的.cpp。 有人可以幫忙嗎?

定義變量不能超過一次。 您將頭文件包含在geometry.cpp和main.cpp中,這將導致對其進行兩次定義。 正如我在評論中提到的,您可以將定義移至“ geometry.cpp”文件。 如果要在其他文件中使用它,請在geometry.h中將其聲明為extern double PI; 並仍然在geometry.cpp中定義它。

geometry.h

#pragma once

// Tell the compiler "this var exists, but in another file"
extern double PI;

class Circle    {
public:
    double radius;
    double area() const;
    double circumference() const;
};

geometry.cpp

#include "geometry.h"

// It is defined here
double PI = 3.1415;

double Circle::area() const {
    return PI*radius*radius;
}

double Circle::circumference() const {
    return 2*PI*radius;
}

假設Pi的值永遠不變,您也可以將其設為const變量。 然后,您可以返回在“ geometry.h”中進行定義

const double PI = 3.1415;

或者,為了完全避免使用全局變量,請使其成為Circle類的成員:

class Circle    {
public:
    const double PI = 3.1415;
    double radius;
    double area() const;
    double circumference() const;
};

還有很多,我無法在這里介紹。 這里列出了很多不錯的C ++書籍: 權威的C ++書籍指南和清單

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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