通过引用C ++传递获得一个奇怪的错误

时间:2014-09-24 01:07:20

标签: c++ xcode

我得到了这个奇怪的错误。当我更多地搜索它时,它说函数没有定义,但我在代码的底部定义它。希望有人可以提供帮助

Ld /Users/Bartski/Library/Developer/Xcode/DerivedData/areaProject-gfmvmiwbtmgqwggbbwbylymlgbvo/Build/Products/Debug/areaProject normal x86_64
cd "/Users/Bartski/Desktop/School/Fall 2014/CIS 265/areaProject"
export MACOSX_DEPLOYMENT_TARGET=10.10
/Applications/Xcode6-Beta7.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -arch x86_64 -isysroot /Applications/Xcode6-Beta7.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -L/Users/Bartski/Library/Developer/Xcode/DerivedData/areaProject-gfmvmiwbtmgqwggbbwbylymlgbvo/Build/Products/Debug -F/Users/Bartski/Library/Developer/Xcode/DerivedData/areaProject-gfmvmiwbtmgqwggbbwbylymlgbvo/Build/Products/Debug -filelist /Users/Bartski/Library/Developer/Xcode/DerivedData/areaProject-gfmvmiwbtmgqwggbbwbylymlgbvo/Build/Intermediates/areaProject.build/Debug/areaProject.build/Objects-normal/x86_64/areaProject.LinkFileList -mmacosx-version-min=10.10 -stdlib=libc++ -Xlinker -dependency_info -Xlinker /Users/Bartski/Library/Developer/Xcode/DerivedData/areaProject-gfmvmiwbtmgqwggbbwbylymlgbvo/Build/Intermediates/areaProject.build/Debug/areaProject.build/Objects-normal/x86_64/areaProject_dependency_info.dat -o /Users/Bartski/Library/Developer/Xcode/DerivedData/areaProject-gfmvmiwbtmgqwggbbwbylymlgbvo/Build/Products/Debug/areaProject

Undefined symbols for architecture x86_64:
  "circle_area(float&)", referenced from:
      _main in main.o
  "square_area(float&)", referenced from:
      _main in main.o
     (maybe you meant: __Z11square_areaRfS_)
  "rec_area(float&, float&)", referenced from:
      _main in main.o
     (maybe you meant: __Z8rec_areaRfS_S_)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

源代码:

#include <iostream>
#include <stdlib.h>

using namespace std;

// prototypes of functions

void input_function(float&);
void input_function2(float&, float&);
void output_function(float);
void circle_area(float&);
void square_area(float&);
void rec_area(float&, float&);

int main(int argc, const char* argv[]) {
    // initialization of variables

    float input_one;
    float input_two;
    float area;
    int choice;
    char repeat;

    do {
        cout << "please choose which shape you would like to use, 1 for "
                "circle, 2 for square, 3 for rectangle" << endl;
        cin >> choice;

        // user chooses which area to calculate

        switch (choice) {
            case 1:
                cout << "Please enter the radius of the circle" << endl;
                input_function(input_one);
                circle_area(input_one);
                cout << "The area of the circle is " << area << endl;
                break;

            case 2:
                cout << "Please enter the lenght of the square side" << endl;
                input_function(input_one);
                square_area(input_one);
                cout << "The area of the square is " << area << endl;
                break;

            case 3:
                cout << "Please enter the lenght of the rectangle height"
                     << endl;
                input_function2(input_one, input_two);
                rec_area(input_one, input_two);
                break;
        }
        cout << "would you like to do it again?  y/n " << endl;
        cin >> repeat;
    } while (repeat ==
             'y'); // repeats if user puts y, ends if anything else is entered

    return 0;
}

// this function gets the input from the user

void input_function2(float& input_one, float& input_two) {
    cout << "please enter the lenght and the width of the rectangle";
    cin >> input_one;
    cin >> input_two;
}

void input_function(float& input_one) {
    cin >> input_one;

    while (input_one < 0) {
        cout << "the dimension cannot be less then 0, please enter again"
             << endl;
        cin >> input_one;
    }
}

// this function calculates the area of the circle

void circle_area(float& input_one, float& area) {
    float const pi = 3.14159;
    area = input_one * input_one * pi;
}

// this function calculates the area of the square

void square_area(float& input_one, float& area) {
    area = input_one * input_one;
}

// this function calculates the area of the rectangle

void rec_area(float& input_one, float& input_two, float& area) {
    area = input_one * input_two;
}

// this function outputs the area to the console

void output_function(float& area) { cout << area; }

1 个答案:

答案 0 :(得分:1)

你宣布你的函数采用一个参数,但后来定义了两个参数。对于编译器,这些是两个不同的函数,因此链接器无法解析引用,因此错误:

更改所有不匹配的声明以获取两个参数而不是一个。