QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1043|回复: 9

CBUILDER,编译,含自定义类代码,的问题(初学)

[复制链接]
发表于 2005-3-4 00:04:58 | 显示全部楼层 |阅读模式
主程序 TEST.CPP
类接口 TESTH.H
类定义 TESTCLASS.CPP

默认安装:添加CBUILDER运行环境
          添加BCC32.CFG和ILINK32.CFG到BIN目录。
问题:
     单个.CPP的源程序编译没有问题,可是像这种自定义类分开保存源文件就不能通过。
表现:
     编译类定义TESTCLASS.CPP出现好像是 无效“_main"引用 还是什么的说明。能生成TESTCLASS.OBJ文件。
     直接编译主程序(我是初学C++,不清楚CBUILDER怎么用),报自定义类出错。能生成TEST.OBJ
       用ILINK32 TEST命令,能生成TEST.EXE,但执行时说无效WIN32文件
  

*我希望了解一下CBUILDER编译这种分开编写的自定义类程序的过程。我用的是学习书(电子工业出版社 C++标准库编程)光盘上的代码。源程序本身没有问题我想。
书上说到CBUILDER还有个程序叫DEBUG什么的。估计是调试程序用的吧所以我没有下安装。应该跟这个没有关系吧?

我本来想绕过这个问题,可是后面的程序都没有办法测试了。我又找了本<<THINK IN C++>>发现后面还是有这样的程序。实在没有办法了。这种分写程序还是比较有用的吧?比如在修改程序时很方便对吗?希望大家能帮帮忙,我得迈过这个坎。谢谢。
发表于 2005-3-4 01:25:27 | 显示全部楼层
贴出代码和出错信息。
回复

使用道具 举报

 楼主| 发表于 2005-3-4 14:46:54 | 显示全部楼层
好的我下次把问题写详细点.
源文件应该没有问题
估计是安装CBUILDER时设置出的错吧或者是编译时过步骤没有搞正确.
版主编译这种程序是怎么操作的呢?
回复

使用道具 举报

 楼主| 发表于 2005-3-4 15:07:26 | 显示全部楼层
//测试,分开,自定义类
//显示“testclass passed!"
//test.cpp
//主程序
#include<iostream>
#include"testh.h"   //调用类申明
using namespace std;

int main()
{
testclass test;       //创建类testclasstest 对象 test
void test.disp();//调用test.disp 函数disp()
}

//testh.h
//类申明
class testclass()   //申明testclass 类
{
public:
   void disp();     //申明构造函数disp()
}

//testclass.cpp
//类testclass 函数实现
#include<iostream>
#include"testh.h"
using namespace std;

void testclass::disp()//定义类testclass 函数disp()
{
cout<<"testclass passed!"<<endl;//显示成功
}

就像这样的程序,假设语法没有错误出错也难免初学.
应该怎么编译呢?
回复

使用道具 举报

 楼主| 发表于 2005-3-4 15:15:02 | 显示全部楼层
相当于把下面这个东东复杂化

//test.cpp

#include<iostream>
using namespace std;

void disp()
{
cout<<"testclass passed!"<<endl;
}

int main()
{
void disp();
}
回复

使用道具 举报

发表于 2005-3-4 16:13:03 | 显示全部楼层
[quote:e84c538eaa="dafn"]//测试,分开,自定义类
//显示“testclass passed!"
//test.cpp
//主程序
#include<iostream>
#include"testh.h"   //调用类申明
using namespace std;

int main()
{
testclass test;       //创建类testclasstest 对象 test
void test.disp();//调用test.disp 函数disp()
}

//testh.h
//类申明
class testclass()   //申明testclass 类
{
public:
   void disp();     //申明构造函数disp()
}

//testclass.cpp
//类testclass 函数实现
#include<iostream>
#include"testh.h"
using namespace std;

void testclass::disp()//定义类testclass 函数disp()
{
cout<<"testclass passed!"<<endl;//显示成功
}

就像这样的程序,假设语法没有错误出错也难免初学.
应该怎么编译呢?[/quote]在类定义和类成员函数调用处有两个关键错误。看看这两方面的资料。
回复

使用道具 举报

 楼主| 发表于 2005-3-4 17:05:48 | 显示全部楼层
我要调的程序不是这个,这是我自已想的估计是有问题的。。

改天我把我要调的程序写上来。。。。
回复

使用道具 举报

 楼主| 发表于 2005-3-5 09:48:05 | 显示全部楼层
//itemtst1.cpp

#include <iostream>
#include <string>
#include "item1.h"
using namespace std;

int main()
{
    StockItem soup;

    soup = StockItem("Chunky Chicken",32,129,
    "Bob's Distribution","123456789");

    soup.Display();

    return 0;
}



//item1.h

class StockItem
{
public:
    StockItem();

    StockItem(std::string Name, short InStock, short Price,
    std::string Distributor, std::string UPC);

    void Display();

private:
    short m_InStock;
    short m_Price;
    std::string m_Name;
    std::string m_Distributor;
    std::string m_UPC;
};


//item1.cpp

#include <iostream>
#include <string>
#include "item1.h"
using namespace std;

StockItem::StockItem()
: m_Name(), m_InStock(0), m_Price(0), m_Distributor(), m_UPC()
{
}

StockItem::StockItem(string Name, short InStock,
short Price, string Distributor, string UPC)
: m_Name(Name), m_InStock(InStock), m_Price(Price),
  m_Distributor(Distributor), m_UPC(UPC)
{
}

void StockItem::Display()
{
    cout << "Name: ";
    cout << m_Name << endl;
    cout << "Number in stock: ";
    cout << m_InStock << endl;
    cout << "Price: ";
    cout << m_Price << endl;
    cout << "Distributor: ";
    cout << m_Distributor << endl;
    cout << "UPC: ";
    cout << m_UPC << endl;
}



D:\test>bcc32 itemtst1
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
itemtst1.cpp:
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: Unresolved external 'StockItem::StockItem()' referenced from D:\TEST\ITEM
TST1.OBJ
Error: Unresolved external 'StockItem::StockItem(std::basic_string<char, std::ch
ar_traits<char>, std::allocator<char> >, short, short, std::basic_string<char, s
td::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char
_traits<char>, std::allocator<char> >)' referenced from D:\TEST\ITEMTST1.OBJ
Error: Unresolved external 'StockItem::Display()' referenced from D:\TEST\ITEMTS
T1.OBJ


D:\test>bcc32 item1
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
ITEM1.cpp:
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: Unresolved external '_main' referenced from C:\BORLAND\BCC55\LIB\C0X32.OB
J
回复

使用道具 举报

发表于 2005-3-5 09:57:40 | 显示全部楼层
要一起编译。bcc32 item1.cpp itemtst1.cpp
回复

使用道具 举报

 楼主| 发表于 2005-3-5 14:00:27 | 显示全部楼层
哈哈哈谢谢

:)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-6 13:54 , Processed in 0.040179 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表