1.C++程序开发的程序开发的文件的布局,比如说Java的文件都放在不同的包里,这样好归类,C++是不是都放在一起?
2.写一个类的时候有一个.h文件和.cpp文件,这2个文件各自主要处理什么。
3.本人写了一个简单的测试用例,包含A.h, A.cpp, B.cpp
//-------------------- A.h
// 定义接口Atemplate<class T>
class A {
public : A();
};// 定义接口B
template<class T>
class B{
public : B();
};

解决方案 »

  1.   

    // ---------------A.cpp
    #include "A.h"template<class T>
    A<T>::A() {
        B<int> *b = new B<int>();
    };void test() {
        A<int> *a = new A<int>();
    }// ---------------B.cpp
    template<class T>
    B<T>:B() {};以上三个文件为什么编译不通过,说Error 1 error LNK2019: unresolved external symbol "public: .....
    然后我把B.cpp中的内容放到A.cpp中就编译通过了。这是什么问题呢?
      

  2.   

    头文件什么的不用考虑,两个cpp都include "A.h"了
      

  3.   

    A.cpp中要知道B是什么,需要有B的定义等
      

  4.   

    A.h中需要class B的前置申明
      

  5.   

    1.C++程序开发的程序开发的文件的布局,比如说Java的文件都放在不同的包里,这样好归类,C++是不是都放在一起?
    不一定,根据需要。2.写一个类的时候有一个.h文件和.cpp文件,这2个文件各自主要处理什么。
    通常在h中放各种声明,包括常量、类型、宏的,在cpp中放代码和数据。3.本人写了一个简单的测试用例,包含A.h, A.cpp, B.cpp
    类模板要把函数代码写在class里面。
    template <class T> 
    class B{ 
    public:
        B()
        {
        }
    }; 
    template <class T> 
    class A { 
    public:
        A()
        {
            B <int> *b = new B <int>();
        }
    };
      

  6.   

    1.C++程序开发的程序开发的文件的布局,比如说Java的文件都放在不同的包里,这样好归类,C++是不是都放在一起? 完全是自己放,包含时都是和文件目录的组织形式一样。不同于JAVA和C#
    2.H负责定义,CPP负责实现。
    3.   B.cpp 是不是没有包含头文件?
      

  7.   

    各位大侠,我把具体代码贴出来,具体代码如下:// 头文件MList.h
    #include <cstdlib>using namespace std;template<class T>
    class MList {
          public :
                 MList();};template<class T>
    class MListItem{
          public :
                 MListItem(T value, MListItem* item);
    };
    // MList.cpp
    #include <cstdlib>
    #include <iostream>
    #include "MList.h"template <class T>
    MList<T>::MList() {
           MListItem<int> *item = new MListItem<int>(10,0);
    };void test() {
           MList<int> *list = new MList<int>();
    }// MListItem.cpp
    #include "MList.h"
    #include <cstdlib>using namespace std; template<class T>
    MListItem<T>::MListItem(T value ,MListItem* item) {};
    如果把MListItem.cpp中的实现放到MList.cpp中就可以编译通过,如果分下来就不通过。
    8楼的兄弟:把B前置声明一下。(是什么意思,具体怎么做?)
      

  8.   

    模板不是这样用的,你可以看看STL中的模板是怎么写的。
      

  9.   

    .h 只告诉类做什么,但怎样具体做要.CPP
      

  10.   

    .h 一般是各种方法、函数、变量的声明;
    .cpp 方法、函数的具体实现过程,变量的处理。提供给别人用或使用别人的代码时,看.h基本就能了解作用了。有利于团队开发。
      

  11.   

    .h文件一般用来定义声明变量、函数、宏之类的。。.cpp文件是具体的程序实现.cpp文件要包含相应的.h文件才能使用已经声明的变量、函数等模板不能分离。你不用模板写一个类似的试试