2011-04-28 33 views
5

Gần đây tôi đã chuyển sang một mac và đang gặp khó khăn khi sử dụng trình biên dịch dòng lệnh. Tôi đang sử dụng g + + để biên dịch, và điều này xây dựng một tập tin nguồn duy nhất tốt. nếu tôi cố gắng thêm một tập tin tiêu đề tùy chỉnh, khi tôi cố gắng biên dịch bằng cách sử dụng g ++ tôi nhận được các ký hiệu không xác định cho kiến ​​trúc i386. Tuy nhiên, các chương trình biên dịch tốt trong xCode. Tôi có thiếu một cái gì đó hiển nhiên?Ký hiệu không xác định cho kiến ​​trúc i386:

đã thử sử dụng g ++ -m32 main.cpp ... không biết nên thử gì khác.


Được rồi, Mã cũ đã biên dịch ... Đã thu hẹp nó xuống nhà thầu của tôi.

class Matrix{ 
public: 
    int a; 
    int deter; 

    Matrix(); 
    int det(); 
}; 

#include "matrix.h" 


Matrix::Matrix(){ 
    a = 0; 
    deter = 0; 
} 

int Matrix::det(){ 
    return 0; 

} 

lỗi của tôi là ký Không xác định cho kiến ​​trúc x86_64: "Matrix :: Matrix()", tham chiếu từ: _main trong ccBWK2wB.o ld: biểu tượng (s) không tìm thấy cho kiến ​​trúc x86_64 collect2 : ld trở về 1 exit status

mã chính của tôi có

#include "matrix.h" 
int main(){ 
    Matrix m; 

    return 0; 
} 

cùng với thông thường

+6

Hãy xem xét chỉnh sửa câu hỏi của bạn để bao gồm mã của bạn, tập tin tiêu đề, và lời gọi dòng lệnh. –

+0

và tất nhiên, đầu ra tương ứng;) – geekazoid

+0

Chỉ cần rõ ràng, bạn đang cố xây dựng kiến ​​trúc nào? Có phải là x86_64 không? – Troubadour

Trả lời

7

Dường như bạn đã có ba tác phẩm:

  • matrix.h, một tập tin header khai báo lớp Matrix;
  • matrix.cpp, tệp nguồn triển khai các phương thức Matrix;
  • main.cpp, tệp nguồn xác định main() và sử dụng lớp Matrix.

Để tạo tệp thực thi với tất cả các ký hiệu, bạn cần phải biên dịch cả tệp .cpp và liên kết chúng lại với nhau.

Cách dễ dàng để thực hiện việc này là chỉ định cả hai trong yêu cầu g++ hoặc clang++ của bạn. Ví dụ:

clang++ matrix.cpp main.cpp -o programName 

hoặc, nếu bạn thích sử dụng g++ - mà Apple đã không được cập nhật trong một thời gian, và có vẻ như họ sẽ không trong tương lai gần:

g++ matrix.cpp main.cpp -o programName 
+0

Hoàn hảo. Vấn đề của tôi là tôi không bao gồm cả hai tệp nguồn của mình trong dòng lệnh của mình. Tôi không nhận ra mình phải làm vậy. Cảm ơn! – maccard

+0

Tôi đã tìm kiếm tất cả các giải pháp này. Cảm ơn. – Nate711

1

Bạn có thực sự định nghĩa hàm tạo Hộp ở đâu đó không? (Như Line.cpp)

+0

Và bạn đang thiếu một ';' sau khai báo hàm tạo. – RedX

+0

Constructor được định nghĩa. Mã biên dịch trong XCode. và không, có một; ở cuối dòng đó, đó chỉ là một loại xin lỗi. – maccard

+1

và bạn cũng bao gồm cả Matrix.cpp trong dòng lệnh, phải không? –

2

là không phải là trường hợp ở đây, nhưng nó có thể xảy ra là bạn quên đặt tên lớp với ::

ví dụ:


.210

một định dạng tốt:

foo.h

class Foo{ 
public: 
    Foo(); 
    void say(); 
private: 
    int x; 
}; 

foo.cpp

Foo::Foo(){ 
    this->x = 1; 
} 

void Foo::say(){ 
    printf("I said!\n"); 
} 

một định dạng xấu

foo.h

class Foo{ 
public: 
    Foo(); 
    void say(); 
private: 
    int x; 
} 

Foo.cpp

Foo::Foo(){ 
    this->x = 1; 
} 

//I always mistake here because I forget to put the class name with :: and the xcode don't show this error. 
void say(){ 
    printf("I said!\n"); 
} 
+0

wow, điều này đã làm nó cho tôi .. Tôi muốn nói không đủ kinh nghiệm c + + từ phía tôi. Tôi nghĩ vấn đề là với Xcode. Nhưng không, đó là lỗi của tôi. Sẽ cẩn thận ngay bây giờ. – 2am

+0

Giải thích hoàn hảo. Cảm ơn. –

Các vấn đề liên quan